2014-11-09 13 views
13

Ultimamente ricevo strane eccezioni nella mia analisi.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) 

Mi manca un vantaggio su ciò che posso fare per impedirlo.

+1

Sembra un bug nella libreria di supporto sui dispositivi LG https://code.google.com/p/android/issues/detail? id = 78154 – bart

+0

grazie - questa è l'informazione di cui avevo bisogno - in qualche modo il tuo google-kung-fu è migliore del mio ;-) – ligi

+0

PS se aggiungi questa risposta come risposta lo accetterò – ligi

risposta

22

Fino LG risolve questo problema (che potrebbe essere mesi, a seconda di quanto tempo ci vuole per rilasciare un nuovo firmware), la seguente soluzione ha funzionato per me. Basta aggiungere il seguente codice alla classe 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); 
} 
+0

Questa è la risposta migliore – midhunhk

0

abbiamo implementato una variante della risposta di Alex. Dal momento che il bug appare solo su 4.1 dispositivi, non preferiamo prevale su qualsiasi altro nelle versioni successive:

@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; 
} 
Problemi correlati