17

ルート化されたデバイスを再起動するために使用できるソリューションを探しています。ここで述べたように、デバイスの再起動はユーザーにとって非常に貧弱な設計であり、実際にはアプリケーション向けではないことを私は知っています。主な目的は、テスト中に電話を再起動することです (私はビデオ チャット アプリケーションで作業しており、すべてがうまくいかなくなったときに再起動する必要がある場合があります)。

とにかく使用できないACTION_REBOOTadb shellで通常の再起動を行うよりも、端末 (または ConnectBot など) で再起動を使用して電話を再起動する方がはるかに速いことがわかりました。

今のところ、スーパーユーザー権限を取得できます。

Process root = Runtime.getRuntime().exec("su");

しかし、実際の再起動はできません。G1 (HTC) と Galaxy S (Samsung) を試してみましたが、成功しませんでした。再起動実行可能ファイルを見つけました/system/bin/reboot

ここに私の試みのいくつかがあります:

Process reboot = Runtime.getRuntime().exec("/system/bin/reboot");
Process reboot = Runtime.getRuntime().exec("reboot");
Process reboot = Runtime.getRuntime().exec("su reboot"); 

Runtime.exec() の落とし穴に関するこの記事を読みましたが、この場合はそうではないと思います。

ConnectBot を使用すると、このようなアクションを実行できるようになるので、それが可能であると確信しています。ConnectBot のコードを見に行くように言わないでください。これは大きくて複雑なプロジェクトです :)

この問題について私を助けてもらえますか?

ありがとう。

4

5 に答える 5

36

最後に数週間の検索の後:

Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});
于 2011-04-24T06:05:30.740 に答える
16

Androidでは再起動は正常に機能します。おそらく runtime.exec() を正しく実行していません。を処理する必要があります

    public static void rebootSU() {
    Runtime runtime = Runtime.getRuntime();
    Process proc = null;
    OutputStreamWriter osw = null;
    StringBuilder sbstdOut = new StringBuilder();
    StringBuilder sbstdErr = new StringBuilder();

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

    try { // Run Script

        proc = runtime.exec("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();
    }
    sbstdOut.append(ReadBufferedReader(new InputStreamReader(proc
            .getInputStream())));
    sbstdErr.append(ReadBufferedReader(new InputStreamReader(proc
            .getErrorStream())));
    if (proc.exitValue() != 0) {
                }
        }
于 2011-04-07T16:10:59.957 に答える
1

プログラムで再起動できないことがわかりました。

さらに、ターミナル エミュレーター アプリを使用して Android フォンでターミナル ウィンドウを開き、su と入力して # root アクセスのプロンプトを表示し、「#reboot」と入力すると、「許可されていません!」という応答が返されます。

助言がありますか?

OK、気にしないで、私はそれを理解しました。HTC フォンでは、SU ルート アクセス権があっても再起動コマンドは機能しません。再起動コマンドを実行するには、BUSYBOX を呼び出す必要があります。

于 2012-05-11T17:29:26.600 に答える