Android: включите устройство программно
У меня смартфон подключен к солнечному зарядному устройству. Днем, он включен правильно. Но ночью иногда он отключается из-за недостатка энергии.
У меня вопрос: можно ли включить его (программно), когда заряд батареи превышает определенный процент? Я ищу чистый и законный путь. Меня не интересуют недостатки или подвиги. Я ничего не нашел в официальной документации. Спасибо.
6 ответов
Механизм для этого основан на замене сценария анимации батареи, который запускается, когда устройство выключено, но подключено к сети, и обычно отображает значок зарядки батареи. Имя скрипта варьируется от устройства к устройству, но обычно оно находится в /system/bin
каталог. Устройства Samsung обычно называют сценарий playlpm
и другие имена для сценария, который я видел, включают ipod
, lpm
, а также battery_charging
, Это не обязательно будет работать на каждом устройстве, потому что это далеко за пределами стандартной платформы Android - некоторые устройства могут не иметь эквивалентный сценарий, или они могут реализовать его по-другому.
Это можно охарактеризовать как "эксплойт" в том смысле, что он требует root и работает на уровне Linux, а не на уровне платформы Android, но в настоящее время нет альтернативы для реализации этого поведения.
Общий механизм внесения этих изменений описан здесь: https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected. Конечно, неплохо бы сделать резервную копию предыдущего сценария анимации батареи, прежде чем делать что-либо из этого.
Следующий скрипт работал для меня на нескольких устройствах (несколько устройств Samsung и Verizon Ellipsis 7). По сути, он проверяет, подключен ли телефон к сети переменного тока и достаточно ли он заряжен. Если это так, он загружается. Если нет, он ждет N секунд и пытается снова. Как побочный эффект, оригинальный скрипт анимации батареи не будет работать, и вы никогда не увидите красивую анимацию зарядки.
#!/system/bin/sh
# battery threshold before boot-up (in percent)
bthresh=10
# time to sleep between checks (in seconds)
sleeptime=600
# file that contains current battery level as integer between 0 and 100
cfi=/sys/class/power_supply/battery/capacity
# file that contains 1 if we're plugged in to AC, 0 if not
acfi=/sys/class/power_supply/battery/subsystem/ac/online
# if either file doesn't exist, just do normal sleep+boot
[ ! -f $cfi ] && sleep $sleeptime && /system/bin/reboot
[ ! -f $acfi ] && sleep $sleeptime && /system/bin/reboot
# populate capacity and AC variables
c=`cat $cfi`
ac=`cat $acfi`
# stop loop if we're not plugged into AC
until [ "$ac" -eq 0 ]
do
# if capacity above threshold, boot up
if [ "$c" -gt "$bthresh" ]; then
/system/bin/reboot
fi
# wait some time before next check
sleep $sleeptime
# update capacity and AC variables
c=`cat $cfi`
ac=`cat $acfi`
done
У меня нет решения, которое не зависит от аппаратного обеспечения и не требует рутирования устройства.
Этот ответ просто предназначен для выяснения некоторых недоразумений.
"устройство выключено, на нем нельзя запустить программное обеспечение любого типа"
Это и правда, и ложь. Во-первых, ни одно современное устройство никогда не выключается. Иногда кнопка выключения предназначена только для показа (например, вашего телевизора). Иногда процессор действительно отключается, но дополнительные схемы на материнской плате по-прежнему питаются постоянным током. Во-вторых, эта дополнительная схема может обеспечить питание процессора и других схем при определенных обстоятельствах, например, при пробуждении при каком-либо внешнем событии (например, подключении к зарядному шнуру) или когда таймер отключения процессора достигает нуля.
Единственный способ по-настоящему выключить современное устройство, такое как смартфон, - это извлечь аккумулятор и шнур питания. И даже это иногда не работает, так как небольшая батарея или конденсатор с малой утечкой могут находиться на материнской плате, чтобы сохранить некоторое рабочее состояние.
Если устройство выключено, на нем нельзя запустить программное обеспечение любого типа.
В прошлый раз, когда я проверял, что рутирование является "легальным" и требуется для этого.
Например, этот файл /system/bin/battery_charging
может быть расположен на вашем устройстве. Отредактируйте это, чтобы содержать
#!/system/bin/sh
/system/bin/reboot
И установить некоторые разрешения
chmod 0755/system/bin/battery_charging
chown root.shell /system/bin/battery_charging
Взято отсюда: https://android.stackexchange.com/questions/20021/automatically-power-on-android-when-the-charger-is-connected
Запуск устройства - это аппаратная задача, и для его запуска необходимо физическое питание (здесь при нажатии кнопки питания). тогда вы не можете сделать это с помощью кода. должна быть физическая сила.