Контент-провайдер для получения 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.
Точно так же вы можете найти, как добавить словарь для других мобильных телефонов.