Прежде чем пометить этот пост как «дублирующий», я пишу его, потому что никакое другое сообщение не содержит решения проблемы.
Я пытаюсь выключить устройство, затем через несколько минут или смены датчика снова включаю.
Отключить тесты дисплея
Я могу выключить экран, используя:
params.flags |= LayoutParams.FLAG_KEEP_SCREEN_ON;
params.screenBrightness = 0;
getWindow().setAttributes(params);
Мне не удалось выключить экран с помощью метода 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.
Ответы:
Я предполагаю, что вы хотите, чтобы это действовало только тогда, когда ваше приложение находится на переднем плане.
Этот код:
Не выключает экран в традиционном понимании. Это делает экран максимально тусклым. В стандартной платформе есть ограничение на то, насколько тусклым он может быть; Если ваше устройство действительно позволяет экрану полностью отключиться, то это некоторая особенность реализации этого устройства, а не поведение, на которое вы можете рассчитывать на разных устройствах.
Фактически, использование этого в сочетании с FLAG_KEEP_SCREEN_ON означает, что вы никогда не позволите экрану выключиться (и, следовательно, устройству перейти в режим низкого энергопотребления), даже если конкретное устройство позволяет вам установить яркость экрана на полную. Имейте это в виду. Вы будете использовать гораздо больше энергии, чем если бы экран был действительно выключен.
Теперь, чтобы вернуть экран к нормальной яркости, достаточно установить значение яркости:
Я не могу объяснить, почему это не заменит ранее установленное вами значение 0. В качестве теста вы можете попробовать установить принудительную полную яркость, чтобы добиться этой конкретной яркости:
Это определенно работает. Например, приложения Google Книги используют это, чтобы вы могли настроить яркость экрана на затемнение при использовании книги, а затем вернуться к обычной яркости при выключении.
Чтобы облегчить отладку, вы можете использовать "adb shell dumpsys window", чтобы увидеть текущее состояние вашего окна. В данных для вашего окна он сообщит вам текущие LayoutParams, которые были установлены для него. Убедитесь, что ценность, которую вы думаете, действительно существует.
И снова FLAG_KEEP_SCREEN_ON - это отдельная концепция; он и яркость не влияют друг на друга напрямую. (И не было бы причин снова устанавливать флаг при отмене яркости, если вы уже установили его при установке яркости на 0. Флаг останется установленным, пока вы его не измените.)
источник
Я написал этот метод для включения экрана после блокировки экрана. У меня он отлично работает. Попытайся-
И вызовите этот метод из
onResume()
.источник
Я бы предложил это:
Флаг ACQUIRE_CAUSES_WAKEUP объясняется так:
Также убедитесь, что у вас есть следующие разрешения в файле AndroidManifewst.xml:
источник
Привет, надеюсь, это поможет:
источник
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK
отключение экрана только тогда, когда датчик приближения находится в "ближнем" состоянии.PROXIMITY_SCREEN_OFF_WAKE_LOCK
снимаю блокировку ожидания, экран снова включается. Как мне предотвратить это?// Файл манифеста пользователя
источник
Вы уверены, что запросили надлежащее разрешение в своем файле манифеста?
Вы можете использовать класс AlarmManager 1, чтобы запустить намерение, которое запускает вашу активность и получает блокировку пробуждения. Это включит экран и оставит его включенным. Снятие блокировки пробуждения позволит устройству перейти в спящий режим самостоятельно.
Вы также можете использовать PowerManager для перевода устройства в спящий режим: http://developer.android.com/reference/android/os/PowerManager.html#goToSleep(long)
источник
Лучший способ сделать это (используя рутированные устройства):
Теперь у нас есть две функции:
И это:
Извините за мой плохой английский.
источник
Вот успешный пример реализации того же самого на устройстве, которое поддерживает более низкие значения яркости экрана (я тестировал на китайском 7-дюймовом планшете Allwinner под управлением API15).
Если кто-то еще попробует это сделать, пожалуйста, прокомментируйте ниже, если это сработало / не сработало и устройство, Android API.
источник
Чтобы экран оставался включенным:
Вернуться в режим экрана по умолчанию: просто снимите флаг FLAG_KEEP_SCREEN_ON
источник
Это работает на Marshmallow
источник
Что касается документации Android, этого можно достичь, используя следующую строку кода:
Я добавил это в свой
onCreate
метод, и он отлично работает.По ссылке вы найдете различные способы достижения этого, а также общее объяснение.
Ссылка на документацию: https://developer.android.com/training/scheduling/wakelock.html
источник
Если ваше приложение является системным, вы можете использовать PowerManager.goToSleep () для выключения экрана, вам требуется специальное разрешение
прежде чем использовать goToSleep (), вам нужно использовать отражение, например:
Теперь вы можете использовать goToSleep (), чтобы выключить экран.
источник
Просто добавьте
или позвоните по телефону
на родительском представлении.
источник
У меня не было бы надежды "разбудить экран" в этом занятии. Если экран выключен, действие, вероятно, находится в приостановленном состоянии и не должно выполняться какой-либо код.
При пробуждении проблема с блокировкой экрана. Я не знаю, как любое приложение может автоматически обходить экран блокировки.
Вам следует рассмотреть возможность запуска фоновых задач в службе, а затем использовать диспетчер уведомлений для отправки уведомления при обнаружении чего-либо. Уведомление должно содержать какое-то предупреждение устройства (пробуждение экрана, значок уведомления, индикатор уведомления и т. Д.). При нажатии на уведомление он может запустить намерение начать вашу деятельность.
Вы также можете попытаться запустить действие прямо из службы, но я действительно не знаю, включит ли это экран или обойдет экран блокировки.
источник
В соответствии с Android API 28 и выше вам необходимо сделать следующее, чтобы включить экран.
источник
Я пробовал все вышеперечисленные решения, но у меня ни одно не помогло. поэтому я погуглил и нашел ниже решения. Я попробовал, и это сработало.
https://www.tutorialspoint.com/how-to-turn-android-device-screen-on-and-off- программно
если есть предложения, пожалуйста, дайте
источник