Android闹钟应用程序在Oreo(仅)下使用NullPoInterException崩溃了Systemui



我有一个Android闹钟应用。我有通常的(?)警报意图 ->接收器 ->活动链,他的最后一步创建了一个全屏窗口并发出警报。

所有这些都可以在Android的Pre-Oreo(API 26)版本上工作。但是在奥利奥(Oreo)上,当警报发射时,系统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时,它不会崩溃 - 但是当然,当手机锁定时也不会显示警报。

我不记得我尝试过的一切,但是这里有一些:

  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下工作。我在做什么错?

已固定的已知错误。特别是在模拟器上。因此,更新模拟器中使用的图像。

它存在于原始的Oreo版本中,如果我正确解释它,则根据历史记录。固定在8.0.0_r21及以后,在8.0.0_r17和更早的情况

您是否尝试过哪些确切版本的Oreo,您是否尝试过8.1和/或各种补丁级别?因为根据此提交是9月20日固定的,所以也许也是另一个提案:

可能:https://android.googlesource.com/platform/frameworks/base//9c4faa85f1bc4ffc4ffc2aa949da7b5d8439f439f4c638a2

或他们相关的来源提交(注意到它是合并提交的)。我引用其中之一:

修复启动期间随机系统崩溃

尝试在模拟器中启动Android时,Systemui可能会因 MNAvigationbar的非初始化价值可能是因为某种种族 由仿真性能问题引起的初始化期间的状况

相关内容

最新更新