我有一个带有注册加速度计的服务。当识别出某些抖动模式时,服务使用此代码启动一个活动。
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
方法。我尝试将相同的代码用于打开和解锁,如上所述,但它不起作用(显示器未打开)。
可能是什么问题?
答案 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();
}