Доступ к контент-провайдеру UserDictionary на уровне API Android 23

Я занимаюсь разработкой приложения для Android, цель которого - показать список на экране с содержимым в пользовательском словаре.

Проблема заключается в том, что когда я компилирую и запускаю приложение в поставщике контента уровня API Android 23, возвращаю курсор без элемента, без каких-либо данных.

Это странно, потому что API предшествует 23 (22, 21, 19, ...), приложение работает и нормально отображает данные в ListView.

Ниже приведен код моей активности:

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);
}
}

3 ответа

Об этом сообщалось здесь: Android Issue Traker

Официальный ответ: работает как задумано. Эта функция была эффективно удалена с API 23.

Существует проблема на уровне API 23, когда поставщик пользовательского словаря возвращает курсор без данных, даже когда словарь заполнен.

Текущий обход use a device or emulator running API level 22 or lower, Вы можете быстро сделать эмулятор API уровня 22.

Согласно официальному документу Android UserDictionary, только IME а также SpellChecker может получить доступ к UserDictionary.

Проверьте ПРИМЕЧАНИЕ на этой странице: https://developer.android.com/reference/android/provider/UserDictionary.html

Другие вопросы по тегам