Подтвердить что ты не робот

Включение экрана программно

Я хотел бы разблокировать экран и включить его, чтобы показать всплывающее окно триггера события. Я могу разблокировать экран, используя

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

на KeyGuardService, но я не могу включить экран. Я использую

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

но без успеха. Экран по-прежнему остается выключенным. Как я могу достичь этого?

4b9b3361

Ответ 1

Ответ Амира заставил меня закрыть, но вам нужен флаг 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();

Ответ 2

В вашей основной деятельности OnCreate() напишите следующий код:

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

Это вызывает пробуждение устройства.

Не забывайте disableKeyguard(), чтобы разблокировать устройство...

Ответ 3

undefined ответьте на проверку 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();
    }
}

Ответ 4

У меня такая же проблема. Поскольку эти ребята обсуждали здесь, есть скрытый api для включения/выключения экрана, см.: https://android.googlesource.com/platform/frameworks/base/+/froyo-release/core/java/android/os/Power.java

Но я не знаю, как это назвать. Я действительно видел, как приложение может включать экран, задаваясь вопросом, является ли оно специфичным для устройства.