以编程方式关闭Android手机

时间:2010-09-19 11:42:51

标签: android

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

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

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

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

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable

我也使用了许可。

6 个答案:

答案 0 :(得分:33)

作为CommonsWare already said,这在普通的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上无效,但尚未确认我自己]

答案 1 :(得分:23)

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

答案 2 :(得分: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,并发布其中的内容?

答案 3 :(得分:7)

更好的解决方案是运行:

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

您可以使用Process

答案 4 :(得分: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);

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

答案 5 :(得分:2)

实际上,根据我的经验,上述回答并不完全准确。我正在尝试调暗屏幕的方法,发现以下内容:

Window w = getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.screenBrightness =.005f;
w.setAttributes (lp);
如果我使用屏幕亮度值为0而不是0.005,

实际上将关闭我的三星Galaxy Tab。

我怀疑这是某个地方的错误,但我没有足够的硬件来测试其他Android机型上的代码。因此,我无法真实地告诉您手机上会发生什么。我可以告诉你,我的代码关闭了我的手机,甚至完全没有签名。

希望我不会后悔分享这些信息......;) R上。