Одно из приложений, над которыми я работаю, - это локальное приложение, которое работает на корневых устройствах. Частью его функциональности является отключение устройства в какой-то момент.
Если я подключаюсь к устройству через adb, я могу выполнить следующую команду в корневой оболочке:
svc power shutdown
Результатом этой команды является то, что на экране отображается диалоговое окно «выключение», и устройство выключается. Все хорошо, за исключением того, что эта команда не работает при выполнении в приложении:
Runtime.getRuntime().exec("su -c 'svc power shutdown'");
вышеупомянутый вызов ничего не делает, но затем, в некоторых случаях, устройство выключается после завершения процесса приложения (например, при переустановке приложения из AndroidStudio).
Итак, я попытался найти альтернативный подход и обнаружил, что работает следующее:
Runtime.getRuntime().exec("su -c 'reboot -p'");
вышеуказанный вызов приводит к немедленному отключению устройства. Немедленно = как вынуть батарею.
Пока этот подход работает, меня беспокоит согласованность состояний и повреждение данных. Похоже, что этот подход просто выключает устройство, не позволяя любому приложению завершить работу и сохранить его состояние. Включая приложение, которое выдало запрос на отключение.
У меня есть два вопроса:
Как сделать так, чтобы первый подход работал надежно (отключение питания svc)?
Должен ли я действительно беспокоиться о несогласованности состояний и повреждении данных, если я перейду ко второму подходу (перезагрузка -p)?
Любая дополнительная информация / ссылки / рекомендации будут с благодарностью.
Спасибо