我有一个 Android 闹钟应用程序。我有通常的(?)警报意图 - >接收器 - >活动链,其最后一步创建一个全屏窗口并发出警报。
所有这些在 Oreo (API 26) 之前的 Android 版本上都可以正常工作。但在 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)
作为一个可能的线索,我发现当我删除WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
from win.addFlags()
,它不会崩溃——但是当然,当手机锁定时它也不会显示警报。
我不记得我尝试过的所有事情,但以下是一些事情:
- 找到Android的
StatusBar.java
源代码试图准确地找出什么东西不应该是空的。显然,我的 Google-fu 在这里让我失望了。
- 明确地解除键盘保护,例如
getSystemService(KeyguardManager.class).requestDismissKeyguard(this, null);
.
- 通过使用解除键盘保护
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
.
- 显式显示和显式隐藏状态栏。
- 我想我尝试了其他一些在锁定时显示窗口的方法 - 比如,调用
setShowWhenLocked(true)
或类似的东西。但这并没有帮助,而且该方法仅在 API 27 中添加,因此即使它也无法解决 API 26 的问题had worked.
- 嗯……其他的事情我已经不记得了。
这些都没有产生任何效果。
显然这个can工作,因为其他闹钟应用程序在奥利奥下工作。我究竟做错了什么?
已知的错误似乎已被修复。尤其是在模拟器上。
因此更新模拟器中使用的图像。
如果我解释正确的话,它似乎出现在最初的奥利奥版本中。已在 8.0.0_r21 及更高版本中修复,存在于 8.0.0_r17 及更早版本中,并且在这些版本之间看不到任何内容)。
您尝试过 8.1 和/或各种补丁级别吗?
因为它已根据此提交于 9 月 20 日修复,也许还有另一个提交:
https://android.googlesource.com/platform/frameworks/base/+/8078996f4a8b1718a2ca56ff52fd1f4d522e7720%5E1..8078996f4a8b1718a2ca56ff52fd1f4d522e7720/ https://android.googlesource.com/platform/frameworks/base/+/8078996f4a8b1718a2ca56ff52fd1f4d522e7720%5E1..8078996f4a8b1718a2ca56ff52fd1f4d522e7720/
可能:https://android.googlesource.com/platform/frameworks/base/+/9c4faa85f1bc4ffc2aa949da7b5d8439f4c638a2 https://android.googlesource.com/platform/frameworks/base/+/9c4faa85f1bc4ffc2aa949da7b5d8439f4c638a2
或者他们相关的源提交(注意到这是合并提交)。
我引用其中一位:
修复启动期间随机的 systemui 崩溃问题
当尝试在模拟器中启动 android 时,systemui 可能会因以下原因崩溃
mNavigationBar 的未初始化值可能是由于某种竞争
由仿真性能问题引起的初始化期间的情况
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)