Access UserDictionary Content Provider on android API level 23

…衆ロ難τιáo~ 提交于 2019-12-07 06:35:06

问题


I'm developing a android application which aims to show a list on the screen with the contents present in the user dictionary.

The problem is that when I compile and run the application in the Android API Level 23 Content Provider return a Cursor with no item, without any data.

It's strange because the API's preceding 23 (22, 21, 19, ...) the app runs and displays the data in the ListView normally.

Below is the code of my Activity:

import android.app.LoaderManager;
import android.content.CursorLoader;
import android.content.Loader;
import android.database.Cursor;
import android.provider.UserDictionary;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<Cursor> {

private ListView listView;
private SimpleCursorAdapter adapter;
private static final String[] COLUMNS = {
        UserDictionary.Words.WORD,
        UserDictionary.Words._ID,
        UserDictionary.Words.LOCALE
};

private static final int[] LIST_ITEM_VIEWS = {
        R.id.name,
        R.id.id_word,
        R.id.locale
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.list);

    adapter = new SimpleCursorAdapter(getApplicationContext(), R.layout.item_list, null, COLUMNS, LIST_ITEM_VIEWS, 0);

    listView.setAdapter(adapter);

    getLoaderManager().initLoader(0, null, this);

}

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    return new CursorLoader(getApplicationContext(), UserDictionary.Words.CONTENT_URI, COLUMNS,
            null, null, UserDictionary.Words.WORD);
}

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    adapter.swapCursor(data);

}

@Override
public void onLoaderReset(Loader<Cursor> loader) {
    adapter.swapCursor(null);
}
}

回答1:


This was reported here: Android Issue Traker

Official response: Working as intended. This feature has been remove effectively since API 23.




回答2:


There is an issue on API level 23 where the user dictionary provider returns a cursor with no data, even when the dictionary is populated.

A current work around is to use a device or emulator running API level 22 or lower. You can quickly make an API level 22 emulator.




回答3:


According to the Android official document of UserDictionary, only IME and SpellChecker can access the UserDictionary.

Check the NOTE on this page: https://developer.android.com/reference/android/provider/UserDictionary.html



来源:https://stackoverflow.com/questions/34242790/access-userdictionary-content-provider-on-android-api-level-23

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!