3

これの解決策を見つけるのを手伝ってください。これについては非常に多くの質問と重複があることを知っていますが、ここで私が試したすべてのことを説明します.

Androidの4.0バージョンがインストールされているAndroidデバイスが1つあります。1 つのデモ アプリケーションを使用して、このデバイスをシャットダウンしたいと考えています。

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.

自動化を容易にするために、このkeytool-importkeypairを使用して Javaファイルにkey/certペアをインポートし、署名に eclipse を使用しました。keystore

使用するコマンドを以下に示します。

コマンド: keytool-importkeypair -k ~/Desktop/myown.keystore -p android -pk8 platform.pk8 -cert platform.x509.pem -alias platform

再起動には次のコードを使用しましたが、これで成功することはありません。

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) {
}
 }

2 回目の試行:

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"

4

2 に答える 2

1

以下のコードは私のために働いた

        Process process = Runtime.getRuntime()
                .exec(new String[]{ "su", "-c", "busybox poweroff -f"});
        process.waitFor();
于 2013-09-20T12:50:33.227 に答える
1

より良い解決策は、次を実行することです。

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

これには aProcessを使用できます。

于 2015-04-28T13:40:45.407 に答える