Выключите экран без сна Android

Есть ли способ быстро отключить экран, не переводя Android в спящий режим?

Например, мне иногда нравится использовать приложение Calm, когда я сплю. Но постоянно держит экран включенным. Когда я просто использую это приложение в течение 10 минут, здорово, что оно держит экран включенным; но если я сплю часами, я бы хотел, чтобы приложение продолжало работать (играло звуки) и выключало экран.

Как это может быть сделано?

Для этого приложение должно явно создать так называемую «Wakelock», которая не позволяет Android переводить процессор в режим глубокого сна и поддерживает работу всей системы (включая ваше приложение).
@GiantTree Верно. Есть ли способ быстро включить / выключить это для всех приложений или определенного приложения?
Насколько я знаю, приложение должно запрашивать такую ​​блокировку самостоятельно. В противном случае Android может просто убить приложение, если оно работает в фоновом режиме без блокировки.
Я, наверное, не понял вопроса. Нельзя ли нажать кнопку питания и дать экрану погаснуть? Если да, ваше приложение перестает работать? Если это правда, этот ответ может быть полезен: есть ли способ заставить приложение продолжать работать в фоновом режиме, несмотря ни на что?
@Firelord Если вы запустите приложение Calm и не нажмете кнопку питания, экран никогда не выключится. После нескольких часов сна я был счастлив, что изображение на экране не было выжжено.
Изменение /sys/class/leds/lcd-backlight/brightnessна 0 делает работу на моем устройстве. Он не переводит устройство в спящий режим, а просто выключает светодиоды. Протестировано в этом приложении Calm. Вы можете слушать его музыку, но при этом не сжигать батарею на экране. Однако требуется root-доступ.
@Firelord Если он выключает экран, как вы вернете значение обратно (поскольку вы ничего не видите)?
Нажмите кнопку питания два раза с промежутком в одну секунду, экран вернется в нормальное состояние. Я попробовал это через ADB, поэтому я всегда мог изменить значение. Вы можете привязать это поведение к кнопке, используя Xposed Additions. Или, возможно, событие в Tasker, основанное на времени, также может быть вариантом.
@Firelord Спасибо ... Я попробую посмотреть, как это работает. Есть ли способ редактировать файл автоматически? Заходить с корневым редактором и каждый раз изменять содержимое файла немного утомительно.
Приложение автоматизации, такое как Tasker, может это сделать. Задача будет + -> Файл -> Записать файл -> ваш контент. Или + -> Код -> Запустить оболочку -> и записать файл с помощью команды.

Ответы (2)

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

Создайте файл с именем «lcdoff» и скопируйте в него следующее:

#!/system/bin/sh
if [ -z "$1" ]; then
    echo "usage: `basename $0` delay"
    exit
fi
su -c 'echo getsu > /dev/null'
echo "Tap power button 2x quickly to restore"
sleep $1
su -c 'echo 0 > /sys/class/leds/lcd-backlight/brightness'

Убедись:

  • Устройство рутировано.
  • Разрешения сценария установлены на исполняемый файл, например, с помощью chmod 755 lcdoff.
  • Скрипт находится в /system/bin(скрипты не могут выполняться из /storage).

Затем откройте терминальное приложение и введите lcdoff 10, чтобы выключить экран после 10-секундной задержки, lcdoff 3030-секундной задержки и т. д. Чтобы убедиться, что процессор остается включенным, просто включите опцию разработчика Android «Не спать» . Редактировать: «Бодрствование» работает только при подключении к источнику питания — альтернативу см. в этом ответе .

Если вы не хотите вводить команду в терминале, вы можете запустить скрипт как пользовательское действие в:

  • Total Commander
  • Таскер
  • Экспоузд Дополнения
  • ваше любимое приложение
Чтобы снова не натолкнуться на мой ответ, я добавлю сюда резервный скрипт, который я использую:if [ "$1" == "0" ]; then su -c 'echo sbylock >/sys/power/wake_unlock'; elif [ "$1" == "1" ]; then su -c 'echo sbylock >/sys/power/wake_lock'; lcdoff 0; else echo "usage: $(basename $0) 0|1"; fi

У меня были некоторые проблемы с принятым ответом, так как я не очень хорошо разбираюсь в сценариях оболочки на Android/Unix/Linux, поэтому я подумал, что добавлю сюда свой опыт для всех, кто находится в похожей лодке.

Чтобы это работало с Tasker или подобным, вам нужна строка:

echo 0 > /sys/class/leds/lcd-backlight/brightness

Для Tasker поместите это в поле «команда» с включенным «Использовать рут», работает как шарм. Чтобы отключить, просто замените ноль на 1, следовательно:

echo 1 > /sys/class/leds/lcd-backlight/brightness

или заблокировать и разблокировать устройство.

Итак, чтобы ответить на ваш вопрос о быстром переключении этого поведения. Назначьте каждую из вышеперечисленных команд задаче Tasker, после чего вы сможете использовать новый перехват при длительном нажатии в последней версии Tasker, чтобы включать и выключать экран, не переводя устройство в спящий режим. В качестве альтернативы вы можете назначить команду профилю, который срабатывает при выполнении ваших условий.