如何以编程方式关闭Android 4.0已root设备

3
请帮我找出解决办法,我知道有很多类似的问题和重复的问题,但我在这里描述了我已经尝试过的所有方法。
我有一个安装了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 对导入到我的 Java keystore 文件中,并使用 keytool-importkeypair 进行签名。我使用 Eclipse 进行签名。
下面是使用的命令: 命令:keytool-importkeypair -k ~/Desktop/myown.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform 我尝试过以下代码来重新启动,但从未成功过。我在stackoverflow上阅读了很多问题和答案,但它们都说你需要
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);
        }
    }

第三次尝试:
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);
        }
    }

在第三种方法中,我也尝试使用了"/system/bin/su"
2个回答

1
下面的代码对我有效。
        Process process = Runtime.getRuntime()
                .exec(new String[]{ "su", "-c", "busybox poweroff -f"});
        process.waitFor();

1
一种更好的解决方案是运行以下命令:
su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN
您可以使用一个进程来执行此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接