プログラムでAndroid電話をオフにできますか?
次のスニペットを使用していますが、うまくいきませんでした。
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard(); // to disable
lock.reenableKeygaurd();// to enable
また、許可を使用しました。
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をチェックして、そこにあるものを投稿することもできますか?
として CommonsWareは既に これは通常のSDKアプリケーションでは不可能であると述べました。 System Firmware Key
を使用してアプリに署名する必要があります。ただし、アプリがRoot
特権を持っている場合は可能です。次のコードを使用してみてください(SUアクセスがある場合):
シャットダウン:
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では機能しないが、自分自身を確認していない]と読みました]
通常のSDKアプリケーションからこれを行うことはできません。これを実行できるのは、システムファームウェア署名キーで署名されたアプリケーションのみです。
より良い解決策は以下を実行することです:
su -c am start -a Android.intent.action.ACTION_REQUEST_SHUTDOWN
これにはProcess
を使用できます。
SigOrSystem権限Android.permission.SHUTDOWNがある場合、保護されたACTION_REQUEST_SHUTDOWNインテントを次のように上げることができます。
Intent intent = new Intent("Android.intent.action.ACTION_REQUEST_SHUTDOWN");
intent.putExtra("Android.intent.extra.KEY_CONFIRM", false);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Android 4.0より前は、この権限は署名のみでした。
実際、私の経験では、上記の応答は完全に正確ではありません。画面を暗くする方法を試していたところ、次のことがわかりました。
Window w = getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.screenBrightness =.005f;
w.setAttributes (lp);
0.005の代わりに、画面の輝度値0を使用すると、実際にSamsung Galaxy Tabがオフになります。
これはどこかバグだと思いますが、他のAndroidモデルでコードをテストするのに十分なハードウェアがありません。私のコードは私の電話を完全に署名していなくても閉じていることをあなたに伝えることができます。