Как выключить Android 4.0 рутированный Устройство программно

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

У меня есть одно устройство Android, где установлена ​​версия 4.0 Android. Я хочу выключить это устройство, используя мое одно демонстрационное приложение.

1) Demo application is signed by platform keys which are used in built in file system.
2) Device is already rooted as its development board and i have all permissions on this.

Приложение содержит следующие вещи

1) Application is system application
2) Application signed by platform keys which are used in built in file system.

Для упрощения автоматизации я импортировал key/cert пара в мою Яву keystore файл, с этим keytool-importkeypair и использовать eclipse для подписи.

Используемая команда упоминается ниже.

Запятая: keytool-importkeypair -k ~/Desktop/myown.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

Я использовал следующий код для перезагрузки, но я никогда не добивался успеха в этом. Я прочитал так много вопросов и ответов по stackru, но все они сказали, что вам нужно

1) root access of device
2) signed apk with any one keys which are available on `build/target/product/security/`
3) Given Proper permission in AndroidManifest.xml file.

Я прав в некоторых точках?

Код приложения:

Первая попытка

public static void shutdown2() {

Runtime runtime = Runtime.getRuntime();
Process proc = null;
OutputStreamWriter osw = null;

String command = "/system/bin/reboot -p";

try { // Run Script

    proc = runtime.exec("/system/xbin/su");
    osw = new OutputStreamWriter(proc.getOutputStream());
    osw.write(command);
    osw.flush();
    osw.close();

} catch (IOException ex) {
    ex.printStackTrace();
} finally {
    if (osw != null) {
        try {
            osw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
try {
    if (proc != null)
        proc.waitFor();
} catch (InterruptedException e) {
    e.printStackTrace();
}
if (proc.exitValue() != 0) {
}
 }

Вторая попытка:

private void shutdown3() {
        try {

            String[] cmd = { "/system/bin/sh","su","reboot -p"};

            Process proc = Runtime.getRuntime().exec(cmd);
            proc.waitFor();
        } catch (Exception ex) {
            Log.i("TAG", "Could not reboot 3  ", ex);
        }
    }

3-я попытка:

private void shutdown() {
        try {
            Process proc = Runtime.getRuntime().exec(
                    new String[] { "/system/bin/su", "-c",
                            "/system/bin/reboot -p" });
            proc.waitFor();
        } catch (Exception ex) {
            Log.i("TAG", "Could not reboot 1 ", ex);
        }
    }

В 3-м методе я также попробовал с "/system/bin/su"

2 ответа

Код ниже работал для меня

        Process process = Runtime.getRuntime()
                .exec(new String[]{ "su", "-c", "busybox poweroff -f"});
        process.waitFor();

Гораздо лучшим решением будет запустить:

su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN

Вы можете использовать Process за это.

Другие вопросы по тегам