我有一个警报活动,该警报活动从服务作为全屏通知意图启动。问题是有时,活动将保持黑色,直到我将其关闭然后再打开。
现在,尽管屏幕为黑色,但视图会响应触摸
如果我尝试截屏,我会突然看到活动,并且如果我关闭屏幕然后再打开,一切都按预期进行。
我似乎无法在调试版本中重现此问题,但是我确实会不时在“生产”版本中重现此错误。 (假设是1/5次)
它会在打之间的早晨发生,但绝不会在第一次警报时出现。 (据我所知)
关于导致此原因的任何想法,或如何重现此想法的建议,将大有帮助。
奇怪的视频
这基本上就是我启动活动的方式:
val builder = NotificationCompat.Builder(context, NotificationChannels.CHANNEL_ALARM_SERVICE)
...
// set intent
val alarmIntent = Intent(context, AlarmActivity::class.java)
alarmIntent.putExtra(IntentExtras.KEY_ID, alarm.id)
builder.setFullScreenIntent(PendingIntent.getActivity(context, RequestCodes.REQUEST_CODE_ALARM_ACTIVITY, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT), true)
...
startForeground(...)
这就是我使用“活动”的onCreate()
方法解锁屏幕的方式
public class ScreenUnlockerUtil {
public static void unlockScreen(BaseActivity activity) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
// in addition to flags
activity.setShowWhenLocked(true);
activity.setTurnScreenOn(true);
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
KeyguardManager keyguardManager = (KeyguardManager) activity.getSystemService(KEYGUARD_SERVICE);
if (keyguardManager != null) {
keyguardManager.requestDismissKeyguard(activity, new KeyguardManager.KeyguardDismissCallback() {
@Override
public void onDismissError() {
super.onDismissError();
ExceptionHandlerWrapper.reportException(new Exception("Keyguard Dismiss Error"));
}
@Override
public void onDismissSucceeded() {
super.onDismissSucceeded();
Timber.d("Keyguard Dismiss Success");
}
@Override
public void onDismissCancelled() {
super.onDismissCancelled();
ExceptionHandlerWrapper.reportException(new Exception("Keyguard Dismiss Cancelled"));
}
});
}
} else {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
}
}
}
编辑1:我没有从设备中看到任何有关键盘锁解除或取消的报告。
编辑2:这一切都发生在Pixel 2 XL上。不是一些乱七八糟的手机。
答案 0 :(得分:2)
一个非常奇怪的问题,我找不到确切的原因。但是我可以想出一个非常稳定的解决方案,只需将以下参数添加到清单文件中即可。我已经尝试了15次,但是再也没有遇到过问题,而我在代码解决方案中尝试了五分之一。
别忘了删除onCreate中的代码行。
<activity android:name=".AlertActivity"
android:showWhenLocked="true"
android:turnScreenOn="true">
</activity>