Контент-провайдер для получения UserDicationary ничего не возвращает

РЕДАКТИРОВАТЬ: я пытался использовать это, чтобы добавить несколько слов

UserDictionary.Words.addWord(getActivity().getApplicationContext(),"DROIDODD",11,null,null);

Теперь курсор содержит это слово, но как мне получить доступ к другим моим словам в личном словаре, где Android хранит новые слова, которые мы вводим через клавиатуры? Находится в этом хранилище данных, тогда почему провайдер контента словаря не имеет к ним доступа?

Я пытаюсь получить и отобразить слова в пользовательском словаре Android с помощью распознавателя содержимого. Проблема в том, что возвращаемый курсор не содержит никаких значений, количество курсоров равно 0, я хочу получить все слова в пользовательском словаре и просто добавить его в текстовом виде внутри моего фрагмента

Код Fragment.java показан ниже:

package com.sweetapps.managephonedictionary;

import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.UserDictionary;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

/**
 * A placeholder fragment containing a simple view.
 */
public class MainActivityFragment extends Fragment {

    private  String details="The words in your personal dictionary are \n\n";

    public MainActivityFragment() {
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.v("myLog","Inside Oncreate");
        //content provider code
        ContentResolver contentResolver= getActivity().getApplicationContext().getContentResolver();
        //get all details
        Cursor cursor=contentResolver.query(UserDictionary.Words.CONTENT_URI,null,null,null,null );
       Log.v("myLog",cursor.getCount()+"");

        while (cursor.moveToNext())
        {
            details=details+cursor.getString(cursor.getColumnIndex(UserDictionary.Words.WORD));
            Log.v("myLog",cursor.getString(cursor.getColumnIndex(UserDictionary.Words.WORD)));
        }

    cursor.close();


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view= inflater.inflate(R.layout.fragment_main, container, false);

        TextView textView= (TextView) view.findViewById(R.id.wordsTextView);
        textView.setText(details);
        return view;
    }
}

Мой вывод только The words in your personal dictionary are

Мой logcat

 V/myLog﹕ Inside Oncreate
 V/myLog﹕ 0

Куда я иду не так, я уверен, что в моем телефонном словаре довольно много слов, я пробовал его на нескольких устройствах, все то же самое. Пожалуйста помоги!

2 ответа

Решение

У меня похожая проблема на моих устройствах Samsung, кажется, что Samsung (по какой-то причине) переопределил пользовательский словарь... Я установил клавиатуру Google из магазина игр, в которой есть возможность добавлять слова в словарь при открытии пользовательского словаря. Я нахожу его пустым, и нажатие кнопки добавления слова не дает никакого ответа, кроме звука системы:).

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

Сначала измените разрешения, чтобы у вас был доступ к контактам.

<uses-permission android:name="android.permission.READ_CONTACTS"/>

Затем измените свой преобразователь контента следующим образом:

Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
int wordColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);

Это заставило меня пройти через остальные эксперименты или упражнения..

Сначала нужно проверить погоду, наш личный словарь пуст или нет.

Я использовал это, чтобы получить результаты:

В телефоне найдите и коснитесь Настройки> Язык и ввод> Личный словарь> Добавить или значок + (плюс). И добавь слово. Теперь попробуйте запустить программу или приложение.

Словарь был пуст, когда я добавил некоторые значения, он вернул результаты.

Для разных версий Android, смотрите эту страницу.

Я использовал вышеуказанную ссылку для Sony.

Точно так же вы можете найти, как добавить словарь для других мобильных телефонов.

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