以编程方式打开屏幕

Mat*_*ska 17 android locking screen

我想解锁屏幕并打开它以在事件触发器上显示弹出窗口.我可以使用解锁屏幕

newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();
Run Code Online (Sandbox Code Playgroud)

KeyGuardService,但我不能把在屏幕上.我在用

wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE);
wl.acquire();
Run Code Online (Sandbox Code Playgroud)

但没有成功.屏幕仍然保持关闭状态.我怎样才能做到这一点?

und*_*ned 33

作者提示:我在2012年写了这篇文章.我不知道它是否有效.请务必查看其他最近的答案.


Amir的回答让我很接近,但你ACQUIRE_CAUSES_WAKEUP至少需要这面旗帜(针对Android 2.3.3构建).

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

//later
screenLock.release();
Run Code Online (Sandbox Code Playgroud)


Vik*_*ngh 7

这是一个非常受欢迎的问题,但现在接受的答案已经过时了

以下是打开屏幕或从活动中唤醒设备屏幕的最新方法:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
    this.setTurnScreenOn(true);
} else {
    final Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
}
Run Code Online (Sandbox Code Playgroud)

使用WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON但 FLAG_TURN_SCREEN_ON 标志已被弃用,API level 27因此您可以从以后使用Activity.setTurnScreenOn(true)API level 27