7

プログラムでモバイルをシャットダウンすることは可能ですか。つまり、su コマンドを使用しません。

4

6 に答える 6

6

可能ですが、アクセスできるRootedAndroid デバイスが必要Superuserです。アプリが で署名されていない限り、ルートなしでは実行できませんSystem Firmware Key。次のコードを使用してみてください。

シャットダウン:

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}

リブート:

同じコードです。"reboot"代わりに を使用して"reboot -p"ください。

[別のメモ: これらのコマンドは Stock HTC ROM では機能しないとどこかで読みましたが、確認していません]

于 2012-09-14T19:28:30.030 に答える
4

PowerManager を使用して再起動することもできます (これは再起動を保証するものではありません - OS がキャンセルする可能性があります)。

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String )

REBOOT 権限が必要です。

http://developer.android.com/reference/android/Manifest.permission.html#REBOOT

キーガードを有効/無効にしようとするときにlogcatをチェックして、そこにあるものを投稿することもできますか?

これは、通常の SDK アプリケーションから行うことはできません。これを実行できるのは、システム ファームウェア署名キーで署名されたアプリケーションのみです。

于 2012-05-02T10:11:53.237 に答える
2

これは、システムコマンドを実行するために使用するコードです。

void shutdown_sys()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");
          DataOutputStream os = 
              new DataOutputStream(chperm.getOutputStream());

              os.writeBytes("shutdown\n");
              os.flush();

              chperm.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

Android アプリからこの関数を呼び出します。システムで su が機能している場合は機能します。うまくいかない場合はお知らせください。テストする準備ができている Android ベースがありません。ただし、再起動でも同じことが機能します。したがって、シャットダウンはLinuxシェルコマンドでもあり、Androidにもあると思います..すべてのベスト

于 2012-05-02T10:21:18.850 に答える
1

本文のタイトルとコード スニペットに類似点はありません。このスニペットは、キーパッドのロックとロック解除に使用される KeyGuardManager に関連しています。

電話をシャットダウンするには、PowerManager または SU コマンドを使用する必要があります。(ルート化されたデバイス上。)

于 2012-05-02T10:14:08.027 に答える
1

デバイスがルート化されている場合は、以下の解決策を試すことができます

シャットダウン:

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}

再起動:

同じコードです。"reboot"代わりに を使用して"reboot -p"ください。

于 2016-08-28T17:48:45.743 に答える