私は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です正確に何を把握しようとする
- ロケAndroidの
StatusBar.java
ソースコードを。私のGoogle-fuは、明らかにここで私に失敗しました。 getSystemService(KeyguardManager.class).requestDismissKeyguard(this, null);
のようなものでキーガードを明示的に解除します。WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
を使用してキーガードを解除します。- 明示的にステータスバーを明示的に非表示にしています。
- 私はロックされたときにウィンドウを表示する他の方法を試してみたと思います。
setShowWhenLocked(true)
などを呼び出してください。しかし、それは助けにはならず、とにかくそのメソッドはAPI 27でのみ追加されていたので、にがあってもAPI 26の問題は解決しませんでした。 - 私はもう覚えていません。
これらのどれも効果がありませんでした。
明らかにこのはが働きます。これは、他の目覚まし時計アプリケーションがOreoで動作するためです。私は間違って何をしていますか?
私はAndroidソースリポジトリをダウンロードして、これがどうして起こっているのかをよりよく理解していますが、それについては何も考えていません。私はこの行のNPEが 'mNavigationBar'のヌルチェックを持っていない' StatusBar.java'コードを見ています。これは他にもほとんどどこにでもありますが、これはAndroidのバグです私の無知が間違っている可能性が高い(とにかく、たとえそれがAndroidのバグだったとしても、いくつかの回避策があります!) –
私が試したことのリストに追加する:ステータスバーとナビゲーションバーをhttps://developer.androidごとに明示的に隠す。 com/training/system-ui/navigation.htmlを参照してください。 –