2017-12-20 22 views
1

私はAndroidの目覚まし時計アプリを持っています。私はいつもの(?)アラームインテント - >レシーバ - >アクティビティチェーンを持っています。最後のステップはフルスクリーンウィンドウを作成し、アラームを鳴らします。Androidアラーム時計アプリがクラッシュし、OrealのNullPointerExceptionでSystemUIが発生する

これはすべて、AndroidのプレOreo(API 26)バージョンでうまく動作します。アラーム火災は、システムのUIがクラッシュすると、私はエミュレータ(少しここでは再フォーマット)でこの例外を取得するときしかし、オレオ、上:可能な手掛かりとして

 12-12 01:15:02.864 9570-9570/com.android.systemui E/AndroidRuntime: 
    FATAL EXCEPTION: main 
Process: com.android.systemui, PID: 9570 
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.systemui.statusbar.phone.NavigationBarFragment.onKeyguardOccludedChanged(boolean)' on a null object reference 
at com.android.systemui.statusbar.phone.StatusBar.onKeyguardOccludedChanged(StatusBar.java:3843) 
at com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager.setOccluded(StatusBarKeyguardViewManager.java:277) 
at com.android.systemui.keyguard.KeyguardViewMediator.handleSetOccluded(KeyguardViewMediator.java:1176) 
at com.android.systemui.keyguard.KeyguardViewMediator.-wrap14(Unknown Source:0) 
at com.android.systemui.keyguard.KeyguardViewMediator$4.handleMessage(KeyguardViewMediator.java:1531) 
at android.os.Handler.dispatchMessage(Handler.java:105) 
at android.os.Looper.loop(Looper.java:164) 
at android.app.ActivityThread.main(ActivityThread.java:6541) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

、私はwin.addFlags()からWindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKEDを削除する際には検出されませんでしたそれはクラッシュしません - もちろん、それはまた、電話がロックされているときにアラームを表示しません。

私は物事のいくつかの私が試したすべてを覚えているが、ここではありません。事はすることになっていないことはnullです正確に何を把握しようとする

  1. ロケAndroidのStatusBar.javaソースコードを。私のGoogle-fuは、明らかにここで私に失敗しました。
  2. getSystemService(KeyguardManager.class).requestDismissKeyguard(this, null);のようなものでキーガードを明示的に解除します。
  3. WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARDを使用してキーガードを解除します。
  4. 明示的にステータスバーを明示的に非表示にしています。
  5. 私はロックされたときにウィンドウを表示する他の方法を試してみたと思います。setShowWhenLocked(true)などを呼び出してください。しかし、それは助けにはならず、とにかくそのメソッドはAPI 27でのみ追加されていたので、があってもAPI 26の問題は解決しませんでした。
  6. 私はもう覚えていません。

これらのどれも効果がありませんでした。

明らかにこのが働きます。これは、他の目覚まし時計アプリケーションがOreoで動作するためです。私は間違って何をしていますか?

+0

私はAndroidソースリポジトリをダウンロードして、これがどうして起こっているのかをよりよく理解していますが、それについては何も考えていません。私はこの行のNPEが 'mNavigationBar'のヌルチェックを持っていない' StatusBar.java'コードを見ています。これは他にもほとんどどこにでもありますが、これはAndroidのバグです私の無知が間違っている可能性が高い(とにかく、たとえそれがAndroidのバグだったとしても、いくつかの回避策があります!) –

+0

私が試したことのリストに追加する:ステータスバーとナビゲーションバーをhttps://developer.androidごとに明示的に隠す。 com/training/system-ui/navigation.htmlを参照してください。 –

答えて

2

修正された既知のバグです。特にエミュレータで。 エミュレータで使用されるイメージを更新します。

オリジナルのオレオリリースでは正しく解釈すれば歴史によると思われました。 8.0.0_r21以降で修正され、8.0.0_r17以前に存在し、それらの間には見えません)。

Oreoの正確なバージョンは、8.1および/またはさまざまなパッチレベルを試しましたか? それは、このコミットによると9月20日に固定していますので、多分他は同様にコミット:

https://android.googlesource.com/platform/frameworks/base/+/8078996f4a8b1718a2ca56ff52fd1f4d522e7720%5E1..8078996f4a8b1718a2ca56ff52fd1f4d522e7720/

もしか: https://android.googlesource.com/platform/frameworks/base/+/9c4faa85f1bc4ffc2aa949da7b5d8439f4c638a2

またはその関連ソースコミット(それがコミットをマージ気づきました)。 は、私はそれらのいずれかを引用:

はエミュレータでアンドロイドを起動しようとすると、systemuiが中にあるため、いくつかのレースでおそらくmNavigationBarの 初期化されていない値に 条件をクラッシュすることがあり、ブート

中にランダムsystemuiクラッシュを修正します初期化時のエミュレーションパフォーマンスの問題

+0

ホット・ジーン。奇妙なのは、私がチェックアウトしたソースブランチがr35だったので、このバグがあります。そして、私はエミュレータをあまりにもずっと前に更新しました(確かに9月20日以降です)。しかし、私は今夜再び更新しようとします。いずれにせよ、私はちょうどこれを無視することができるように聞こえる。答えてくれてありがとう! –

+1

さて、9月20日はそれのマージの一つで、解放された画像に現れるまでかなりの時間がかかります。 –

関連する問題