Подтвердить что ты не робот

NullPointerException (@PhoneWindow: onKeyUpPanel: 1002) {main}

В последнее время я получаю странные исключения в своей аналитике.

java.lang.NullPointerException
at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:1002)
at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1703)
at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2114)
at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3626)
at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3596)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2839)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4904)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)

Мне не хватает лидерства в том, что я могу сделать, чтобы это предотвратить.

4b9b3361

Ответ 1

Пока LG не исправляет эту проблему (это может быть месяцы, в зависимости от того, сколько времени потребуется для выпуска новой прошивки), для меня было создано следующее обходное решение. Просто добавьте следующий код в класс Activity:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) {
       return true;
   }
   return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
   if (keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND)) {
       openOptionsMenu();
       return true;
   }
   return super.onKeyUp(keyCode, event);
}

Ответ 3

Мы реализовали вариант ответа Алекса. Поскольку ошибка появляется только на устройствах 4.1, мы предпочитаем не переопределять что-либо в более поздних версиях:

    @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    return mightCrash(keyCode) || super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, @NonNull KeyEvent event) {
    if (mightCrash(keyCode)) {
        openOptionsMenu();
        return true;
    }

    return super.onKeyUp(keyCode, event);
}

/**
 * See https://code.google.com/p/android/issues/detail?id=78154
 */
private boolean mightCrash(int keyCode) {
    return keyCode == KeyEvent.KEYCODE_MENU && "LGE".equalsIgnoreCase(Build.BRAND) && Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN;
}