安卓SDK崩溃

  1. java.lang.NullPointerException

at android.webkit.AccessibilityInjector$TextToSpeechWrapper$1.onInit(AccessibilityInjector.java:753)
at android.speech.tts.TextToSpeech.dispatchOnInit(TextToSpeech.java:640)
at android.speech.tts.TextToSpeech.initTts(TextToSpeech.java:619)
at android.speech.tts.TextToSpeech.<init>(TextToSpeech.java:553)
at android.webkit.AccessibilityInjector$TextToSpeechWrapper.<init>(AccessibilityInjector.java:676)
at android.webkit.AccessibilityInjector.addTtsApis(AccessibilityInjector.java:480)
at android.webkit.AccessibilityInjector.addAccessibilityApisIfNecessary(AccessibilityInjector.java:168)
at android.webkit.AccessibilityInjector.onPageStarted(AccessibilityInjector.java:340)
at android.webkit.WebViewClassic.onPageStarted(WebViewClassic.java:4480)
at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:366)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5407)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)

Analysis:
该问题主要发生在4.2 (Build.VERSION_CODES.JELLY_BEAN_MR1)(SDK_INT == 17)手机上,当辅助功能打开时,加载WebView会发生该crash,解决方法,可以在创建WebView时利用反射强制关闭辅助功能。
Fix:

    /**
     * m:lorss
     * 关闭辅助功能,针对4.2.1和4.2.2 崩溃问题
     * java.lang.NullPointerException
     * at android.webkit.AccessibilityInjector$TextToSpeechWrapper$1.onInit(AccessibilityInjector.java:753)
     * ... ...
     * at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:321)
     */
    private void disableAccessibility(Context context) {
        if (Build.VERSION.SDK_INT == 17/*4.2 (Build.VERSION_CODES.JELLY_BEAN_MR1)*/) {
            if (context != null) {
                try {
                    AccessibilityManager am = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
                    if (!am.isEnabled()) {
                        //Not need to disable accessibility
                        return;
                    }
                    
                    Method setState = am.getClass().getDeclaredMethod("setState", int.class);
                    setState.setAccessible(true);
                    setState.invoke(am, 0);/**{@link AccessibilityManager#STATE_FLAG_ACCESSIBILITY_ENABLED}*/
                } catch (Exception ignored) {
                    
                } catch(Error ignored){
                    
                }
            }
        }
    }



你可能感兴趣的:(安卓SDK崩溃)