LoginSignup
16
16

More than 5 years have passed since last update.

Support Library v7 の ActionBarActivity を Android 4.1以下のLG端末で使うときの注意

Posted at

概要

LG端末でだけ謎のクラッシュレポートが届いていたので調べた結果をメモ。
結論としては、LGの4.1以下端末に向けた回避コードが必要orz

なお、手元には該当の端末が無いため未検証。

クラッシュレポート

こんなレポートが送られてくる。

java.lang.NullPointerException
    at com.android.internal.policy.impl.PhoneWindow.onKeyUpPanel(PhoneWindow.java:987)
    at com.android.internal.policy.impl.PhoneWindow.onKeyUp(PhoneWindow.java:1686)
    at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2097)
    at android.view.ViewRootImpl.deliverKeyEventPostIme(ViewRootImpl.java:3618)
    at android.view.ViewRootImpl.handleImeFinishedEvent(ViewRootImpl.java:3588)
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:2834)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:4849)
    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:795)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
    at dalvik.system.NativeStart.main(Native Method)

うん、自分の書いたコードに関する部分は全くないね。。。

原因と回避策

回避策はこのスレッドで議論されてた。
原因はLGカスタマイズAndroidのバグとのこと(参考死ねばいいのに

onKeyUponKeyDownをオーバーライドしてLG端末かつAPIレベル16以下で判定して回避処理を入れる。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     if ((keyCode == KeyEvent.KEYCODE_MENU) &&
          (Build.VERSION.SDK_INT <= 16) &&
          (Build.MANUFACTURER.compareTo("LGE") == 0)) {
       return true;
    }
    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_MENU) &&
             (Build.VERSION.SDK_INT <= 16) &&
             (Build.MANUFACTURER.compareTo("LGE") == 0)) {
       openOptionsMenu();
     return true;
    }
    return super.onKeyUp(keyCode, event);
}

雑感

ただこれ、クラッシュレポート見てもどのActivityで起きてるかわからんのよね。
全部のActivityに入れるしか無いのか...

16
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
16