Я разрабатываю приложение для Android, и мы должны отключить его при определенных обстоятельствах.
Я читал во многих местах, что для этого вам нужен корневой телефон. Затем вы можете выполнить команду "reboot" с помощью Java API:
try {
Process proc = Runtime.getRuntime()
.exec(new String[]{ "su", "-c", "reboot -p" });
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
Я действительно пробовал это на устройстве Cyanogenmod 10 (Samsung Galaxy S3), и он работает. Однако мы не хотим использовать внедренное устройство, чтобы отключить его, так как конечный пользователь сможет делать непреднамеренные действия, которые не разрешены нашей компанией.
С другой стороны, наше приложение подписывается сертификатом производителя, в данном случае Cyanogen's. Я прочитал, что, подписав ваше приложение с сертификатом производителя, вы должны иметь возможность выдавать привилегированные команды (как root). Однако, даже если я устанавливаю приложение как системное приложение, подписанное с сертификатом производителя, вышеуказанный код не работает:
-
Если я оставлю часть команды su, появится экран "Запрос суперпользователя", но это то, что мы пытаемся избежать.
-
Если я удалю часть "su" (просто оставив "reboot -p" ), команда молча игнорируется.
В результате мы не можем отключить наше устройство с помощью нашего системного приложения, которое подписано с сертификатом разработчика. Итак, мой вопрос: как я должен это делать?
EDITED
И, кстати, на всякий случай кто-то не уверен в этом: приложение правильно подписано и установлено как системное приложение, потому что мы можем фактически получить доступ к некоторым ограниченным API, таким как PowerManager.goToSleep()