通过编程关闭Android手机

通过编程关闭Android手机,android,shutdown,Android,Shutdown,我们可以通过编程关闭Android手机吗 我正在使用以下代码段,但它对我不起作用 KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE); KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE); lock.disableKeyguard(); // to disable

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

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

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

lock.disableKeyguard(); // to disable

lock.reenableKeygaurd();// to enable

我也使用了权限。

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

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

它需要重新启动权限:


在尝试启用/禁用keyguard时,您是否也可以检查您的logcat,并公布其中的内容?

事实上,根据我的经验,上述回答并不完全准确。我正在试验调暗屏幕的方法,发现如下情况:

Window w = getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.screenBrightness =.005f;
w.setAttributes (lp);
如果屏幕亮度值为0,而不是0.005,将关闭三星Galaxy标签

我怀疑这是个bug,但我没有足够的硬件在其他Android机型上测试代码。因此,我真的无法告诉你手机上会发生什么。我可以告诉你,我的手机代码甚至完全未签名也会关闭。

因为这在普通SDK应用程序中是不可能的。您需要使用
系统固件密钥对应用程序进行签名。但是,您的应用程序可能具有
Root
权限。尝试使用以下代码(如果您有SU访问权限):

关机:

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

try {
    Process proc = Runtime.getRuntime()
                    .exec(new String[]{ "su", "-c", "reboot -p" });
    proc.waitFor();
} catch (Exception ex) {
    ex.printStackTrace();
}
同样的代码,只需使用
“reboot”
而不是
“reboot-p”



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

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

su-c am start-a android.intent.action.action\u REQUEST\u SHUTDOWN


您可以使用
进程来执行此操作。

如果您具有sigOrSystem权限android.permission.SHUTDOWN,您可以像下面这样提出受保护的操作请求\u 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之前,此权限仅为签名。

您无法从普通SDK应用程序重新启动。只有使用系统固件签名密钥签名的应用程序才能做到这一点。啊,好吧,很公平-好吧,不管怎样我都会保留这一点,这样他就可以阅读有关PowerManager的信息了…检查我的答案:这是可能的,有根手机。你知道提供这一功能的固件吗?你能推荐一些吗?谢谢。实际上你可以。只需设置一些发送频繁挂起的意图的东西(例如,1Hz的GPS或类似的东西),然后再也不会实际接收它们。在某些情况下,这会在不到一分钟内导致虚假的重新启动。(虽然这不是一种推荐的方式…)对于我用过的手机来说,这只是完全关闭了屏幕。你的标签上一定有个奇怪的虫子,这就是我当时想要的效果。我们已经为我们的系统更换了手机,并确定这不是我们想要的功能,但这是一个非常有趣的发现。我的手机已植根,我将app推入/system/app/。但这对我不起作用。4.0中有什么特别的地方吗???会出现SU对话框吗?您使用的是哪款手机、android和rom?在我的例子中,当它在单独的线程中执行时,该代码运行良好(否则su对话框将启动但不可见)。非常感谢。这一个对我来说都适用。。。关机::重新启动-p。。。。重新启动:重新启动。。。谢谢帮助:)@Sheharyar:通常当我们以正常方式关闭时,我们会看到一个显示“正在关闭…”的对话框,但是当执行上述代码段时,选项卡会突然关闭。在关闭之前,它应该如何正常工作/执行(不显示任何对话框)?很好的解决方案,除了su后面的命令应该用引号括起来。这在我的情况下不起作用应用程序崩溃时没有找到处理意图的活动