以编程方式打开屏幕

时间:2010-05-23 10:21:46

标签: android screen locking

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

解锁屏幕
newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();

KeyGuardService,但我无法打开屏幕。我正在使用

wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE);
wl.acquire();

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

5 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

在您的主要活动的OnCreate()中编写以下代码:

((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG").acquire();

它会唤醒设备。

不要忘记disableKeyguard()来解锁设备......

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:0)

未定义的NullPointer检查和设置超时的答案:

= link_to '#', aria_label: "Change Icon", class: 'btn btn-info', id: 'icon-button' do
    %i{class: icon, id: 'icon-button', data: {icon: icon}, aria_hidden: true}

答案 4 :(得分:-1)

我有同样的问题。正如这些人讨论here,有一个隐藏的api来打开/关闭屏幕,请参阅:https://android.googlesource.com/platform/frameworks/base/+/froyo-release/core/java/android/os/Power.java

但我不知道怎么称呼它。我实际上已经看到应用程序可以打开屏幕,想知道它是否是特定于设备的。