Включение экрана программно - PullRequest
17 голосов
/ 23 мая 2010

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

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

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

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

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

Ответы [ 5 ]

33 голосов
/ 19 апреля 2012

Примечание автора: Я написал это еще в 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();
2 голосов
/ 22 июня 2018

Это очень популярный вопрос, но принятый ответ устарел .

Ниже приведен последний способ Включить экран ИЛИ разбудить экран вашего устройства от действия:

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 level 27, поэтому вы можете использовать Activity.setTurnScreenOn (true) с API level 27 * *.

2 голосов
/ 22 декабря 2011

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

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

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

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

0 голосов
/ 26 ноября 2017

неопределенный ответ с проверкой 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();
    }
}
0 голосов
/ 14 января 2011

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

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

...