以编程方式关闭Android手机

Sri*_*Sri 36 android shutdown

我们可以通过编程方式关闭Android手机吗?

第二个问题:如何在Android中锁定和解锁屏幕?

我正在使用以下代码片段,但它对我不起作用.

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); 
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); 

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable
Run Code Online (Sandbox Code Playgroud)

我也使用了许可.

She*_*yar 34

正如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();
}
Run Code Online (Sandbox Code Playgroud)

重新开始:

相同的代码,只需使用"reboot"而不是"reboot -p".


[另一方面:我在某处看到这些命令在Stock HTC ROM上不起作用,但还没有证实我自己]


Com*_*are 23

您无法从普通的SDK应用程序执行此操作.只有使用系统固件签名密钥签名的应用程序才能执行此操作

  • 其实你可以。只需设置一些发送频繁挂起意图的东西(例如,1Hz 的 GPS 或类似的东西),然后从不实际接收它们。在某些情况下,这将导致不到一分钟的虚假重启。(虽然不是真正的*推荐*方式......) (2认同)

xil*_*il3 16

您可以使用PowerManager使其重新启动(这并不能保证它会重新启动 - 操作系统可能会取消它):

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应用程序重新启动.只有使用系统固件签名密钥签名的应用程序才能执行此操作 (17认同)

tri*_*468 7

一个更好的解决方案是运行:

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

你可以使用一个Process.


Rup*_*ley 6

如果您拥有sigOrSystem权限android.permission.SHUTDOWN,您可以像这样提升受保护的ACTION_REQUEST_SHUTDOWN Intent:

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);
Run Code Online (Sandbox Code Playgroud)

请注意,在Android 4.0之前,此权限仅为签名.