Android: Как программно включать и выключать экран? - PullRequest
91 голосов
/ 05 марта 2012

Прежде чем пометить этот пост как "дубликат", я пишу этот пост, потому что ни один другой пост не содержит решения проблемы.

Я пытаюсь выключить устройство, затем через несколько минут илиСмена датчика, включите его снова.

Отключение тестов дисплея

Я могу выключить экран с помощью:

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);

IНе удалось отключить экран с помощью метода wl.release ().

Проверка включения дисплея

Моя первая догадка, как показано ниже, не работает.Ничего не происходит, экран остается выключенным.

params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = -1f;
getWindow().setAttributes(params);

Затем я также попытался использовать wakelocks, но безуспешно.

PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag");
wl.acquire();

Наконец я попробовал следующее, но безрезультатно.

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

В общем, я не получаю никакой ошибки в консоли ни для одного из этих методов.Мой тестовый текст «Экран должен быть включен» отображается на экране, когда я включаю устройство с помощью кнопки питания.Это показывает, что код должен был работать.Пожалуйста, отвечайте, только если вы проверили код, похоже, что многие функции, такие как params.screenBrightness = -1, не работают должным образом в соответствии с SDK.

Ответы [ 14 ]

2 голосов
/ 05 декабря 2018

Если ваше приложение является системным приложением, вы можете использовать PowerManager.goToSleep () для выключения экрана, вам требуется специальное разрешение

, прежде чем использовать goToSleep (), вам нужноиспользовать отражение так же, как:

public static void goToSleep(Context context) {
    PowerManager powerManager= (PowerManager)context.getSystemService(Context.POWER_SERVICE);
    try {
        powerManager.getClass().getMethod("goToSleep", new Class[]{long.class}).invoke(powerManager, SystemClock.uptimeMillis());
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (InvocationTargetException e) {
        e.printStackTrace();
    } catch (NoSuchMethodException e) {
        e.printStackTrace();
    }
}

Теперь вы можете использовать goToSleep () для выключения экрана.

Это то, что происходит при нажатии клавиши питания для выключенияэкран.

2 голосов
/ 17 апреля 2017

Чтобы экран оставался включенным:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Вернуться в режим экрана по умолчанию: просто снимите флажок FLAG_KEEP_SCREEN_ON

getWindow().clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
1 голос
/ 04 декабря 2016

Что касается документации Android, это может быть достигнуто с помощью следующей строки кода:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Я добавил это в мой onCreate метод, и он отлично работает.

По ссылкеВы найдете различные способы достижения этого и общего объяснения.

Ссылка на документацию: https://developer.android.com/training/scheduling/wakelock.html

1 голос
/ 14 марта 2012

У меня не было бы надежды на «пробуждение экрана» в упражнении. Если экран выключен, активность, вероятно, находится в состоянии паузы и не должна выполнять какой-либо код.

При пробуждении возникает проблема блокировки экрана. Я не знаю, как любое приложение может автоматически обойти экран блокировки.

Вам следует рассмотреть возможность выполнения фоновых задач в службе, а затем использовать диспетчер уведомлений для отправки уведомления при обнаружении. Уведомление должно содержать какое-то оповещение устройства (пробуждение экрана, значок уведомления, уведомление и т. Д.). При нажатии на уведомление он может запустить намерение начать свою деятельность.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...