У меня есть рутированный Lenovo P770, где я удалил несколько «системных» приложений, включая стандартную клавиатуру TouchPal. После сброса настроек я установил AnySoftKeyboard с помощью adb
( adb shell ime
...), и теперь он работает. Однако я больше не могу получить доступ к настройкам языка и ввода, так как получаю сообщение «К сожалению, настройки остановлены» в тот момент, когда я нажимаю на элемент меню. Вот трассировка стека из adb logcat
:
W/dalvikvm( 8972): threadid=1: thread exiting with uncaught exception (group=0x40db2908)
E/AndroidRuntime( 8972): FATAL EXCEPTION: main
E/AndroidRuntime( 8972): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: java.lang.NullPointerException
E/AndroidRuntime( 8972): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
E/AndroidRuntime( 8972): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
E/AndroidRuntime( 8972): at android.app.ActivityThread.access$600(ActivityThread.java:149)
E/AndroidRuntime( 8972): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
E/AndroidRuntime( 8972): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8972): at android.os.Looper.loop(Looper.java:153)
E/AndroidRuntime( 8972): at android.app.ActivityThread.main(ActivityThread.java:5108)
E/AndroidRuntime( 8972): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8972): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime( 8972): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
E/AndroidRuntime( 8972): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:751)
E/AndroidRuntime( 8972): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 8972): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 8972): at android.preference.PreferenceGroup.removePreferenceInt(PreferenceGroup.java:181)
E/AndroidRuntime( 8972): at android.preference.PreferenceGroup.removePreference(PreferenceGroup.java:174)
E/AndroidRuntime( 8972): at com.android.settings.VoiceInputOutputSettings.populateOrRemoveTtsPrefs(VoiceInputOutputSettings.java:144)
E/AndroidRuntime( 8972): at com.android.settings.VoiceInputOutputSettings.populateOrRemovePreferences(VoiceInputOutputSettings.java:94)
E/AndroidRuntime( 8972): at com.android.settings.VoiceInputOutputSettings.onCreate(VoiceInputOutputSettings.java:89)
E/AndroidRuntime( 8972): at com.android.settings.inputmethod.InputMethodAndLanguageSettings.onCreate(InputMethodAndLanguageSettings.java:121)
E/AndroidRuntime( 8972): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:796)
E/AndroidRuntime( 8972): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1035)
E/AndroidRuntime( 8972): at android.app.BackStackRecord.run(BackStackRecord.java:635)
E/AndroidRuntime( 8972): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1397)
E/AndroidRuntime( 8972): at android.app.Activity.performStart(Activity.java:5030)
E/AndroidRuntime( 8972): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2157)
E/AndroidRuntime( 8972): ... 11 more
W/ActivityManager( 351): Force finishing activity com.android.settings/.SubSettings
W/ActivityManager( 351): Force finishing activity com.android.settings/.Settings
Поскольку в трассировке стека упоминается VoiceInputOutputSettings
, я попытался установить приложение Google (насколько я понимаю, оно предоставляет возможности распознавания голоса), но это ничего не изменило. Так же пробовал установить TouchPal из маркета, тоже безрезультатно.
Вот записи, settings.db
которые кажутся актуальными:
_id,name,value
72,selected_spell_checker,com.google.android.inputmethod.latin/com.android.inputmethod.latin.spellcheck.AndroidSpellCheckerService
73,selected_spell_checker_subtype,0
94,input_methods_subtype_history,com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME;834845621:com.menny.android.anysoftkeyboard/.SoftKeyboard;-1
95,selected_input_method_subtype,-1
96,default_input_method,com.menny.android.anysoftkeyboard/.SoftKeyboard
97,enabled_input_methods,com.menny.android.anysoftkeyboard/.SoftKeyboard
Как я могу исправить этот сбой?
Исправлено установкой Google TTS .
Это можно определить из трассировки стека и исходного кода приложения настроек :
public void onCreate() {
mParent = mFragment.getPreferenceScreen();
mVoiceCategory = (PreferenceCategory) mParent.findPreference(KEY_VOICE_CATEGORY);
mTtsSettingsPref = mVoiceCategory.findPreference(KEY_TTS_SETTINGS);
populateOrRemovePreferences();
}
private void populateOrRemovePreferences() {
boolean hasTtsPrefs = populateOrRemoveTtsPrefs();
if (!hasTtsPrefs) {
// There were no TTS settings and no recognizer settings,
// so it should be safe to hide the preference category
// entirely.
mFragment.getPreferenceScreen().removePreference(mVoiceCategory);
}
}
private boolean populateOrRemoveTtsPrefs() {
if (mTtsEngines.getEngines().isEmpty()) {
mVoiceCategory.removePreference(mTtsSettingsPref);
return false;
}
return true;
}
Звонок removePreference
прерывался. По-видимому, я также удалил Google TTS, который был в комплекте с этой версией Android.
Дэн Халм
пастафарианец
Тамогна Чоудхури
/system/app
и, возможно/system/priv-app
, в зависимости от того, где он был установлен ранее, это могло бы исправить это, учитывая перезагрузку и, возможно, еще один сброс настроек. В следующий раз знайте, что вы можете безопасно избавиться от бесполезных игр и некоторых приложений Play, но оставьте приложение клавиатуры в покое.пастафарианец
/system/app
. Это ничего не изменило.