以编程方式关闭 Android 手机
Posted
技术标签:
【中文标题】以编程方式关闭 Android 手机【英文标题】:Programmatically switching off Android phone 【发布时间】:2011-04-14 07:36:15 【问题描述】:我们可以通过编程方式关闭 android 手机吗?
我正在使用以下 sn-p 但它对我不起作用。
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Activity.KEYGUARD_SERVICE);
KeyguardLock lock = keyguardManager.newKeyguardLock(KEYGUARD_SERVICE);
lock.disableKeyguard(); // to disable
lock.reenableKeygaurd();// to enable
我也使用了权限。
【问题讨论】:
检查我的答案:***.com/questions/2927083/… 有根手机是可能的。 【参考方案1】:作为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,但我自己还没有确认]
【讨论】:
我的手机已经root,我在 /system/app/ 推送应用。但它不适合我。 4.0有什么特别的吗??? 是否出现 SU 对话框?您使用的是哪款手机、android 和 rom? 在我的情况下,这段代码在单独的线程中执行时运行良好(否则 su 对话框已启动但不可见)。谢谢! 这两种情况都适用于我... SHUTDOWN:: reboot -p .... REBOOT: reboot ... 感谢您的帮助:) @Sheharyar:通常当我们以正常方式关闭时,我们会看到一个显示“正在关闭...”的对话框,但是当执行上述 sn-p 时,选项卡会非常突然关闭。是这样吗应该在关机前正常工作/执行(不显示任何对话框)?【参考方案2】:您无法通过普通的 SDK 应用程序执行此操作。只有使用系统固件签名密钥签名的应用程序才能执行此操作。
【讨论】:
您知道提供该功能的固件吗?你能推荐一些吗?谢谢。 其实可以的。只需设置一些发送频繁未决意图的东西(例如,1Hz 的 GPS 或类似的东西),然后从不实际接收它们。在某些情况下,这会在一分钟内导致虚假重启。 (虽然不是真正的推荐方式......)【参考方案3】:您可以使用 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 应用程序重新启动。只有使用系统固件签名密钥签名的应用程序才能执行此操作。 啊,好吧,很公平 - 好吧,无论如何我都会把它留下,这样他就可以阅读有关 PowerManager 的信息...【参考方案4】:一个更好的解决方案是运行:
su -c am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN
您可以为此使用Process
。
【讨论】:
很好的解决方案,除了 su 后面的命令应该用引号引起来。【参考方案5】:如果你有 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 之前,此权限仅用于签名。
【讨论】:
这在我的情况下不起作用,应用程序崩溃,找不到处理 Intent 的活动【参考方案6】:实际上,根据我的经验,上述回答并不完全准确。我正在尝试使屏幕变暗的方法,发现如下:
Window w = getWindow();
WindowManager.LayoutParams lp = w.getAttributes();
lp.screenBrightness =.005f;
w.setAttributes (lp);
如果我使用屏幕亮度值 0 而不是 0.005,实际上会关闭我的三星 Galaxy Tab。
我怀疑这是某个地方的错误,但我没有足够的硬件来测试其他 Android 型号上的代码。因此,我无法真正告诉您手机上会发生什么。我可以告诉你,我的代码关闭了我的手机,甚至完全未签名。
【讨论】:
这只会完全关闭我使用过的手机的屏幕。一定是你的标签上的一个奇怪的错误 这实际上是我当时正在寻找的效果——哦,好吧。我们已经为我们的系统更换了手机,并确定这不是我们想要的功能,但这是一件非常有趣的事情。以上是关于以编程方式关闭 Android 手机的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式获取 Android 手机型号,如何在 android 中以编程方式获取设备名称和型号?