我们可以通过编程方式关闭Android手机吗?
我正在使用以下代码段,但对我而言无效。
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard(); // to disable
lock.reenableKeygaurd();// to enable
而且我也使用了许可。
您可能使用PowerManager使其重新启动(这不能保证它将重新启动-操作系统可能会取消它:]
http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String)
它需要重新启动权限:
http://developer.android.com/reference/android/Manifest.permission.html#REBOOT
您是否可以在尝试启用/禁用键盘锁时检查您的logcat,并发布其中的内容?
作为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上不起作用,但尚未确认自己]
su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN
您可以为此使用Process
。
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,而不是0.005,则实际上将关闭我的Samsung Galaxy Tab。我怀疑这是某个地方的错误,但是我没有足够的硬件来测试其他Android型号上的代码。因此,我无法真正告诉您手机上会发生什么。我可以告诉你,我的代码关闭了我的手机,甚至完全没有签名。