Programmgesteuertes Ausschalten des Android-Telefons

Können wir ein Android-Telefon programmatisch ausschalten?

Zweite Frage: Wie kann man den Bildschirm in Android sperren und entsperren?

Ich verwende folgendes Snippet, aber es hat nicht für mich funktioniert.

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.disableKeyguard(); // to disable lock.reenableKeygaurd();// to enable 

und ich habe die Erlaubnis auch benutzt.

   

Sie können möglicherweise den PowerManager verwenden, um es neu zu starten (dies garantiert nicht, dass es neu gestartet wird – das Betriebssystem kann es abbrechen):

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

Es erfordert die REBOOT-Erlaubnis:

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

Kannst du deinen Logcat auch überprüfen, wenn du Keyguard aktivieren / deaktivieren willst, und posten, was dort ist?

Wie CommonsWare bereits sagte , ist dies in einer gewöhnlichen SDK-Anwendung nicht möglich. Sie müssen Ihre App mit dem System Firmware Key signieren. Es ist jedoch möglich, dass Ihre App Root Berechtigungen besitzt. Versuchen Sie, den folgenden Code zu verwenden (wenn Sie SU-Zugriff haben) :

Herunterfahren:

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

Neustart:

Gleicher Code, benutze einfach "reboot" statt "reboot -p" .


[Auf eine andere Anmerkung: Ich habe irgendwo gelesen, dass diese Befehle nicht auf Stock HTC ROMs funktionieren, aber mich nicht bestätigt haben]

Sie können dies nicht von einer normalen SDK-Anwendung aus tun. Nur Anwendungen, die mit dem System-Firmware-Signaturschlüssel signiert sind, können dies tun.

Eine viel bessere Lösung ist das Ausführen von:

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

Sie können dafür einen Process .

Wenn Sie die Berechtigung sigOrSystem android.permission.SHUTDOWN haben, können Sie den geschützten ACTION_REQUEST_SHUTDOWN Intent wie folgt auslösen:

 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); 

Beachten Sie, dass diese Berechtigung vor Android 4.0 nur eine Signatur war.

Die obigen Antworten sind meiner Erfahrung nach nicht vollständig korrekt. Ich experimentierte mit Möglichkeiten, den Bildschirm zu dimmen und fand Folgendes heraus:

 Window w = getWindow(); WindowManager.LayoutParams lp = w.getAttributes(); lp.screenBrightness =.005f; w.setAttributes (lp); 

wird mein Samsung Galaxy Tab tatsächlich ausschalten, wenn ich statt 0,005 einen Bildschirmhelligkeitswert von 0 verwende.

Ich vermute, dass das ein Fehler ist, aber ich habe nicht genügend Hardware, um den Code auf anderen Android-Modellen zu testen. Daher kann ich dir nicht wirklich sagen, was auf deinem Handy passieren wird. Ich kann dir sagen, dass mein Code meines Telefons sogar komplett unsigniert schließt.

Hoffentlich werde ich es nicht bereuen diese Informationen zu teilen …..;) R.