【发布时间】:2023-03-10 03:49:01
【问题描述】:
我有一个警报活动,它作为全屏通知意图从服务启动。问题是有时,活动将保持黑色,直到我将其关闭并重新打开。
现在,虽然屏幕是黑色的,但 视图会响应触摸
如果我尝试截屏,我会突然看到活动,如果我关闭并再次打开屏幕,一切都会按预期工作。
我似乎无法在我的调试版本中重现此问题,但它确实会在“生产”版本中不时发生在我身上。 (假设是 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(...)
这就是我在 Activity 的 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 上。不是什么乱七八糟的手机。
【问题讨论】:
-
诺基亚6.1 Android 9也有同样的问题。我没有使用dismiss keyguard,所以它显然与activity.setShowWhenLocked(true);活动.setTurnScreenOn(true);
-
@DominikK 显然,当我们的用户锁定在随机三星设备上时,它也不会显示活动。
-
我不确定三星设备。我们在这些设备上讨论的是哪个 API 级别?
-
@DominikK 没有低于 API 21,但我不确定这些用户正在运行哪个版本。
-
您知道问题出现在哪些类型的三星手机上,例如 Galaxy S9、S8、Note、...
标签: android android-activity alarmmanager android-notifications android-doze