FLAG_TURN_SCREEN_ON不起作用

sin*_*sha 5 android android-intent android-windowmanager android-activity

我有一个注册加速度计的服务.当识别出某些摇动模式时,服务使用此代码启动一个活动.

Intent launchIntent = new Intent("my.package.MAIN_ACTIVITY");
LaunchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(LaunchIntent);
Run Code Online (Sandbox Code Playgroud)

onCreate我使用此代码段来解锁手机并打开屏幕:

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
                WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON|
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

如果用户有时不与活动交互,我会使用此代码启用显示关闭:

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Run Code Online (Sandbox Code Playgroud)

如果在显示活动时显示屏关闭并且电话锁定,并且我重复摇动模式,onStart则调用该方法.我尝试将相同的代码用于打开和解锁,如上所述,但它不起作用(显示未打开).

可能是什么问题呢?

sin*_*sha 5

我设法解决了这个问题.在开始我的活动时,我使用WakeLock:

PowerManager pm = ((PowerManager) getSystemService(POWER_SERVICE));
screenLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire();
Run Code Online (Sandbox Code Playgroud)

此代码将阻止屏幕关闭.但之后我启动了一个延迟几秒的计时器,它禁用了WakeLock:

if(screenLock.isHeld()) {
    screenLock.release();
}
Run Code Online (Sandbox Code Playgroud)