以编程方式关闭Android手机

问题描述 投票:36回答:6

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

我正在使用以下代码段,但对我而言无效。

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

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable

而且我也使用了许可。

android shutdown
6个回答
16
投票

您可能使用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,并发布其中的内容?


34
投票

作为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上不起作用,但尚未确认自己]


23
投票
您不能通过普通的SDK应用程序执行此操作。只有使用系统固件签名密钥签名的应用程序才能执行此操作。

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

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

您可以为此使用Process


6
投票
如果您具有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之前,此权限仅是签名。

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

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

如果我使用的屏幕亮度值为0,而不是0.005,则实际上将关闭我的Samsung Galaxy Tab。

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

© www.soinside.com 2019 - 2024. All rights reserved.