我想解锁屏幕并将其打开以在事件触发器上显示弹出窗口。我可以使用
解锁屏幕newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();
KeyGuardService
,但我无法打开屏幕。我正在使用
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, HANDSFREE);
wl.acquire();
但没有成功。屏幕仍然保持关闭状态。 我怎样才能做到这一点?
答案 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
但我不知道怎么称呼它。我实际上已经看到应用程序可以打开屏幕,想知道它是否是特定于设备的。