Tengo un Lenovo P770 rooteado, donde desinstalé varias aplicaciones de "sistema", incluido el teclado estándar, TouchPal. Después de un restablecimiento de fábrica, instalé AnySoftKeyboard con adb
( adb shell ime
...), y ahora funciona. Sin embargo, ya no puedo acceder a la configuración de idioma y entrada, ya que recibo el mensaje "Desafortunadamente, la configuración se detuvo" en el momento en que toco el elemento del menú. Aquí está el stacktrace de 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
Dado que el stacktrace menciona VoiceInputOutputSettings
, intenté instalar la aplicación de Google (hasta donde yo entiendo, proporciona capacidades de reconocimiento de voz), pero eso no cambió nada. También intenté instalar TouchPal desde el mercado, sin ningún efecto.
Aquí están las entradas settings.db
que parecen relevantes:
_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
¿Cómo puedo solucionar este bloqueo?
Se solucionó instalando Google TTS .
Esto podría determinarse a partir del stacktrace y el código fuente de la aplicación de configuración :
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;
}
La removePreference
llamada se colapsaba. Aparentemente, también había desinstalado Google TTS, que se incluía con esta versión de Android.
dan hulme
pastafarianista
Tamoghna Chowdhury
/system/app
y posiblemente/system/priv-app
, dependiendo de dónde se haya instalado anteriormente, eso podría solucionarlo, dado un reinicio y posiblemente otro restablecimiento de fábrica. A partir de la próxima vez, sepa que puede deshacerse de forma segura de los juegos inútiles y algunas aplicaciones de Play, pero deje la aplicación de teclado en paz.pastafarianista
/system/app
. Eso no cambió nada.