FLAG_TURN_SCREEN_ON不起作用

时间:2013-11-19 19:36:43

标签: android android-intent android-activity android-windowmanager

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

Intent launchIntent = new Intent("my.package.MAIN_ACTIVITY");
LaunchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(LaunchIntent);

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);

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

Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

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

可能是什么问题?

1 个答案:

答案 0 :(得分:5)

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

PowerManager pm = ((PowerManager) getSystemService(POWER_SERVICE));
screenLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
screenLock.acquire();

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

if(screenLock.isHeld()) {
    screenLock.release();
}