Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

概要

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に入れるしか無いのか...

chibatching
Androidアプリ開発
http://www.chibatching.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away