以编程方式打开屏幕

发布于 2024-09-03 07:34:25 字数 353 浏览 2 评论 0原文

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

newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();

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

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

但没有成功。屏幕仍然处于关闭状态。 我怎样才能实现这个目标?

I would like to unlock screen and switching it on to show a popup on an event trigger. I am able to unlock the screen using

newKeyguardLock = km.newKeyguardLock(HANDSFREE);
newKeyguardLock.disableKeyguard();

on KeyGuardService but I cannot turn on the screen. I am using

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

but with no success. The screen still remains off.
How can I achieve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

栖迟 2024-09-10 07:34:25

作者注:这是我在 2012 年写的。我不知道它是否还有效。请务必查看其他最新的答案。


阿米尔的回答让我很接近,但你至少需要 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();

Note from author: I wrote this back in 2012. I don't know if it works anymore. Be sure to check out the other more recent answers.


Amir's answer got me close, but you need the ACQUIRE_CAUSES_WAKEUP flag at least (Building against 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();
比忠 2024-09-10 07:34:25

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

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

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 但 FLAG_TURN_SCREEN_ON 标志已在 API 级别 27 中弃用,因此您可以使用 Activity.setTurnScreenOn(true)API 级别 27 开始。

This is very popular question but the accepted answer now is outdated.

Below is latest way to Turn On Screen OR wake up your device screen from an activity:

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

Use WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON but FLAG_TURN_SCREEN_ON flag has been deprecated in API level 27 so you can use Activity.setTurnScreenOn(true) from API level 27 onward.

好多鱼好多余 2024-09-10 07:34:25

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

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

它会导致设备唤醒。

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

In your main activity's OnCreate() write following code:

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

It causes the device to wake up.

Do not forget disableKeyguard() to unlock the device...

一人独醉 2024-09-10 07:34:25

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

private void turnOnScreen() {
    PowerManager.WakeLock screenLock = null;
    if ((getSystemService(POWER_SERVICE)) != null) {
        screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
                PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        screenLock.acquire(10*60*1000L /*10 minutes*/);


        screenLock.release();
    }
}

undefined's answer with NullPointer check and set timeout :

private void turnOnScreen() {
    PowerManager.WakeLock screenLock = null;
    if ((getSystemService(POWER_SERVICE)) != null) {
        screenLock = ((PowerManager)getSystemService(POWER_SERVICE)).newWakeLock(
                PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "TAG");
        screenLock.acquire(10*60*1000L /*10 minutes*/);


        screenLock.release();
    }
}
心作怪 2024-09-10 07:34:25

您可以这样做:

PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
    PowerManager.WakeLock  wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP |
            PowerManager.ON_AFTER_RELEASE, "appname::WakeLock");

    //acquire will turn on the display
    wakeLock.acquire();

确保在清单中设置权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

This is how you can do it:

PowerManager powerManager = (PowerManager) context.getSystemService(context.POWER_SERVICE);
    PowerManager.WakeLock  wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK |
            PowerManager.ACQUIRE_CAUSES_WAKEUP |
            PowerManager.ON_AFTER_RELEASE, "appname::WakeLock");

    //acquire will turn on the display
    wakeLock.acquire();

make sure to set permission in the manifest :

<uses-permission android:name="android.permission.WAKE_LOCK"/>
时光礼记 2024-09-10 07:34:25

2023工作Kotlin版本

我需要修改这个答案https://stackoverflow.com/a/50979446/10233647 一点点,但终于成功了!

简单地尝试一下:

val window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)

当屏幕锁定时,这确实会唤醒屏幕!

2023 working Kotlin version

I needed to modify this answer https://stackoverflow.com/a/50979446/10233647 a little bit, but finally managed to make it work!

Try simply:

val window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)

This really wakes the screen, when it's locked!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文