1 votes

NullPointerException lors de l'ouverture des paramètres de langue et de saisie

J'ai un Lenovo P770 enraciné, où j'ai désinstallé plusieurs applications "système", y compris le clavier standard, TouchPal. Après une réinitialisation d'usine, j'ai installé AnySoftKeyboard avec adb ( adb shell ime ...), et maintenant cela fonctionne. Cependant, je ne peux plus accéder aux paramètres de langue et de saisie car j'obtiens un message "Malheureusement, les paramètres se sont arrêtés" dès que je touche l'élément de menu. Voici le suivi de pile 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

Puisque la trace de la pile mentionne VoiceInputOutputSettings J'ai essayé d'installer l'application Google (d'après ce que j'ai compris, elle permet la reconnaissance vocale), mais cela n'a rien changé. J'ai également essayé d'installer TouchPal depuis le marché, sans résultat non plus.

Voici les entrées de settings.db qui semblent pertinents :

_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

Comment puis-je réparer cette panne ?

0 votes

Un redémarrage de la ROM stock fonctionnerait probablement. Il suffit ensuite de s'abstenir de désinstaller les applications dont le système a besoin pour fonctionner.

0 votes

@DanHulme Je pense que ce problème peut être résolu sans reflashage complet. TouchPal n'est certainement pas un type d'application nécessaire au fonctionnement d'Android.

0 votes

Cela pourrait être. Une partie des paramètres de langue et de saisie, la partie "Langue", peut être hébergée par l'application clavier installée et activée dans certains cas, et il peut y avoir d'autres liens croisés entre cette partie et l'application clavier par défaut du système. Si vous pouviez récupérer un APK de TouchPal et l'envoyer à /system/app et éventuellement /system/priv-app En fonction de l'endroit où il a été installé précédemment, cela pourrait résoudre le problème, après un redémarrage et éventuellement une nouvelle réinitialisation des paramètres d'usine. À partir de la prochaine fois, sachez que vous pouvez vous débarrasser en toute sécurité des jeux inutiles et de certaines applications Play, mais ne touchez pas à l'application du clavier.

0voto

Pastafarianist Points 119

Corrigé en installant Google TTS .


Cela a pu être déterminé à partir de la trace de la pile et de l'écran de l'ordinateur. code source des applications de paramétrage :

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

El removePreference L'appel était en panne. Apparemment, j'avais également désinstallé Google TTS, qui était fourni avec cette version d'Android.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X