Сразу оговорюсь: первая часть (автовключение) темы не относится к андроидбоксам, на них, в виду отсутствия батареи, автовключение можно реализовать только аппаратно, или покупать такой, который включается при подаче питания.
Итак, суть вопроса: включить (полная загрузка) планшет/смартфон в момент подачи зарядного тока, и отключение при отключении от зарядки (важно для встроенных планшетов).
Автозагрузка при подаче зарядного тока.
Немного теории.
Когда вы подключаете выключенный планшет/смартфон к ЗУ, происходят следующие события: просыпается процессор; происходит инициализация бутлоадера; происходит начало загрузки
init; стартует главный стартовый скрипт
/init.rc; в init.rc есть секция
on charger, в которой прописаны нужные действия и запуск системного процесса, который и отвечает за отображение батарейки с процентами, которую мы и видим на экране.
Итак, как мы видим, происходит частичная загрузка системы. Процесс в секции on charger всегда указывает на какой-то исполняемый файл (бинарник) лежащий где-то в системе. Выглядит примерно это так:
В init.rc объявлен сервис типа charger:
service charger /system/bin/charger
То есть, порядок действий такой: смотрим секцию
on charger в init.rc, видим там что-то типа
start charger или что-то другое, типа
class_start charger, могут быть и другие варианты; потом, по имени сервиса, находим в том же
init.rc сам сервис
service charger /....... и смотрим на какой бинарник он указывает.
Нужно иметь в виду, что нужный сервис может быть объявлен не в
init.rc, а в любом другом
init.****.rc на вашем устройстве, придется пересмотреть все. Иногда существует даже отдельный скрипт
init.charge.rc.
Ок. Бинарник мы нашли, переименовать во что-то другое, а под его именем создаем скрипт (без расширений, в точности как назывался сам бинарник) с таким содержимым:
Код:
#!/system/bin/sh
/system/bin/reboot
Сохраняем и присваиваем ему
права 755. Все. Аппарат будет включатся и ребутится в андроид сразу после подачи напряжения.
Тут еще можно добавить секцию, в которой можно описать автозапуск каких либо программ по умолчанию в авто. Хотелось бы узнать каких? И по какому условию (как определить, что ваш аппарат находится именно в машине, вариантом может быть подключение какого-то оборудования, ГПС например, или запуск какой-то программы, любые другие события, придумайте), попробую реализовать?
(продолжение следует)
Вторая часть - выключение при пропадании напряжения зарядки.
Тут есть несколько вариантов реализации, к примеру можно в своем бут включить поддержку скриптов
init.d, добавив в конце
init.rc (надо разбирать свой
boot.img. Как это делать - смотрите на 4pda.ru в теме своего устройства, или обратитесь к РОМоделам. Часто эта функция уже присутствует в большинстве кастомных РОМов.) такие строки:
Код:
service sysinit /system/bin/logwrapper /system/xbin/busybox run-parts /system/etc/init.d
class main
user root
oneshot
disabled
on property:sys.initd=1
start sysinit
а в файл defaul.prop или /system/build.prop в самом низу дописать строку
sys.initd=1
Аналогичным
init.d образом работает папка со скриптами
/system/su.d, если у вас
рут на основе SuperSu. Тогда бут разбирать не надо.
В любом случае, в системе должен быть установлен busybox, иначе скрипты работать НЕ БУДУТ!
Итак,
init.d, busybox у нас есть. Создаем скрипт с таким содержимым:
Код:
#!/system/bin/sh
# Copyright by kostyamat http://4pda.ru/forum/index.php?showuser=896398
#Во всех устройствах данные по зарядке находятся по адресу
#/sys/class/power_supply/*battery/status.
#Измените переменную FILE, изменив путь к status исходя из названия *battery
#для вашего аппарата.
#Cостояние файла /sys/class/power_supply/*battery/status может иметь
#разные значения, без подключенного ЗУ (смотреть свое): 0; Discharging;
# Not on charger и т.п. (в каждом конкретном случае нужно смотреть).
#Вариантов миллион, гляньте какой текст хранится в status с помощью команды
#cat /sys/class/power_supply/*battery/status (без ЗУ) и впишите ниже, в
#условие if, вместо Discharging, между "".
FILE="/sys/class/power_supply/dollar_cove_battery/status"
pch () {
while :
do
vars=`cat $FILE`
if [ "$vars" = "Discharging" ]; then
svc power shutdown
else
echo "Device is charging"
fi
sleep 30
done
}
pch &
Помещаем его в папку /system/init.d или /system/su.d с любым названием и
присваиваем ему права 755. Нужно помнить, что скрипту не нужно присваивать никакое расширение имени файла, в том числе и sh.
Не выполняются в init.d скрипты, имеющие расширение имени файла. После перезагрузки, планшет будет выключаться автоматически, при пропадании напряжения зарядки. Скрипт безусловен, работает по умолчанию.
Ниже рассмотрим примеры условного выключения, и варианты самих условий. Хотелось бы от Вас услышать возможные условия автоматического выключения, например по наличию подключенной EasyCAP, DAC и тому подобное. Как Вы считаете нужным идентифицировать наличия подключения к машине, соответственно важность автоматического выключения? Жду советов, по возможности, попробую реализовать условия.
(продолжение следует)