Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓警报-键盘守卫被解雇后,活动有时会保持黑色_Android_Android Activity_Alarmmanager_Android Notifications_Android Doze - Fatal编程技术网

Android 安卓警报-键盘守卫被解雇后,活动有时会保持黑色

Android 安卓警报-键盘守卫被解雇后,活动有时会保持黑色,android,android-activity,alarmmanager,android-notifications,android-doze,Android,Android Activity,Alarmmanager,Android Notifications,Android Doze,我有一个报警活动,它作为全屏通知意图从服务启动。问题是,有时,活动将保持黑色,直到我将其关闭并再次打开 现在,尽管屏幕是黑色的,视图对触摸做出响应 如果我尝试截屏,我会突然看到活动,如果我关闭屏幕并再次打开,一切都会按预期进行 我似乎无法在我的调试版本中重现这一点,但在“生产”版本中它确实时常发生在我身上。(比方说1/5次) 它会发生在早上打盹之间,但不会在第一次闹钟响的时候发生。(据我所知) 任何关于是什么导致了这一现象,或者如何重现这一现象的想法都将大有裨益 古怪的视频: 这就是我启动

我有一个报警活动,它作为全屏通知意图从服务启动。问题是,有时活动将保持黑色,直到我将其关闭并再次打开

现在,尽管屏幕是黑色的,视图对触摸做出响应

如果我尝试截屏,我会突然看到活动,如果我关闭屏幕并再次打开,一切都会按预期进行

我似乎无法在我的调试版本中重现这一点,但在“生产”版本中它确实时常发生在我身上。(比方说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:这一切都发生在像素2 XL上。不是随便买的破手机。

一个很奇怪的问题,我找不到确切的原因。但我可以想出一个非常稳定的解决方案,只需将以下参数添加到清单文件中,就可以了。我已经尝试了15次,但再也没有遇到过这个问题,而在代码解决方案中,我有过5次中的1次

不要忘记删除onCreate中的代码行

    <activity android:name=".AlertActivity"
        android:showWhenLocked="true"
        android:turnScreenOn="true">
    </activity>


我也有同样的问题,诺基亚6.1安卓9。我没有使用Disclose keyguard,因此它显然与活动相关;activity.setTurnScreenOn(真)@DominikK显然,当我们的用户锁定在随机的三星设备上时,它也不会显示活动。我不确定三星设备。我们在这些设备上谈论的是哪种API级别?@DominikK API 21以下没有任何内容,但我不确定这些用户正在运行哪个版本。你知道问题发生在哪种类型的三星手机上吗,比如Galaxy S9、S8,注意……我希望它也适用于你,我仍然没有再次遇到这个问题。我有,目前rollin正在生产中,但我没有任何方法来验证这一点,除非等待是否有人抱怨。我已经在生产中使用我的应用程序两周了,以后再也没有发生过。祝你好运:)差不多一年后,使用此解决方案,问题再也不会出现。问题的根本原因是什么?这个问题被谷歌跟踪了吗?