1

我在网上搜索并研究了这个问题,但没有得到明确的答案。我已经使用内容提供者将单词添加到用户字典中,因为android 文档指出这些单词被添加,但是之后当我在键盘上键入时,我看不到该单词出现在候选视图中的建议中,因为我们点击了其他单词下次出现在那里。我真的很感激这个问题的完整答案,因为很多人在网上问这个问题而没有得到回答。我试过这个

    Uri mNewUri;
    // Defines an object to contain the new values to insert
    ContentValues mNewValues = new ContentValues();

     // Sets the values of each column and inserts the word. The arguments to the "put"
     // method are "column name" and "value"

    mNewValues.put(UserDictionary.Words.APP_ID, "example.user");
    mNewValues.put(UserDictionary.Words.LOCALE, "en_US");
    mNewValues.put(UserDictionary.Words.WORD, "Qasim");
    mNewValues.put(UserDictionary.Words.FREQUENCY, "100");

    mNewUri = getContentResolver().insert(
        UserDictionary.Words.CONTENT_URI,   // the user dictionary content URI
        mNewValues                          // the values to insert
    );


    Uri dic = UserDictionary.Words.CONTENT_URI;
    ContentResolver resolver = getContentResolver();
    Cursor cursor = resolver.query(dic, null, null, null, null);
 //here i retrieve all the words stored into my dictionary
    while (cursor.moveToNext()){
       String word = cursor.getString(cursor.getColumnIndex(UserDictionary.Words.WORD));
       int id = cursor.getInt(cursor.getColumnIndex(UserDictionary.Words._ID));
       String app = cursor.getString(cursor.getColumnIndex(UserDictionary.Words.APP_ID));
       int frequency = cursor.getInt(cursor.getColumnIndex(UserDictionary.Words.FREQUENCY));
       String locale = cursor.getString(cursor.getColumnIndex(UserDictionary.Words.LOCALE));
       Log.i("", "word: "+word+"\nId: "+id+"\nAppID: "+app+"\nfrequency: "+frequency+"\nLocale:"+locale);
    }

如果有人在这里帮助我,将不胜感激

4

1 回答 1

1

如果您使用的键盘读取用户字典,您应该能够按照文档所述将单词添加到字典中,使用resolver.insert.

我使用默认键盘手动添加了一些单词。使用resolver.query新词在输出中列出。键盘正在向字典中添加新单词。

之后,我使用resolver.insert. 这个词被添加到字典中(它出现在resolver.query输出中),它也作为建议出现在键盘上。

如果我切换到另一个键盘(例如 Swiftkey),这些单词不会用于预测。也许您正在使用一些不同的键盘。

我的完整代码是:

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Get the TextView which will be populated with the Dictionary ContentProvider data.
        TextView dictTextView = (TextView) findViewById(R.id.dictionary_text_view);
        // Get the ContentResolver which will send a message to the ContentProvider
        ContentResolver resolver = getContentResolver();
        // Put a new word on the dictionary
        final Locale locale;
        locale = Locale.getDefault();
        final int COLUMN_COUNT = 3;
        ContentValues values = new ContentValues(COLUMN_COUNT);
        values.put(Words.WORD, "Quasimodo");
        values.put(Words.FREQUENCY, 250);
        values.put(Words.LOCALE, locale.toString());
        Uri result = resolver.insert(UserDictionary.Words.CONTENT_URI, values);

        // Get a Cursor containing all of the rows in the Words table
        // The word "Quasimodo" inserted will be shown
        Cursor cursor = resolver.query(UserDictionary.Words.CONTENT_URI, null, null, null, null);
        // Surround the cursor in a try statement so that the finally block will eventually execute
        try {
            dictTextView.setText("UserDictionary contains " + cursor.getCount() + " words\n");
            dictTextView.append("COLUMNS: " + Words._ID  + " - " + Words.FREQUENCY +
                    " - " + Words.WORD);
            int idColumn = cursor.getColumnIndex(UserDictionary.Words._ID);
            int frequencyColumn = cursor.getColumnIndex(UserDictionary.Words.FREQUENCY);
            int wordColumn = cursor.getColumnIndex(UserDictionary.Words.WORD);
            while (cursor.moveToNext()) {
                int id = cursor.getInt(idColumn);
                int frequency = cursor.getInt(frequencyColumn);
                String word = cursor.getString(wordColumn);
                dictTextView.append(("\n" + id + " - " + frequency + " - " + word));
            }
        } finally {
            cursor.close();
        }
    }
}

之后我的键盘显示插入这个词作为建议。

在此处输入图像描述

于 2015-10-04T21:34:47.423 回答