如何以编程方式关闭Android手机?

时间:2012-05-02 10:09:20

标签: android

是否可以通过编程方式关闭移动设备。 没有使用su命令..

6 个答案:

答案 0 :(得分:6)

可能,但您需要具有Rooted访问权限的Superuser Android设备。除非您的应用已使用System Firmware Key签名,否则无法在没有Root的情况下执行此操作。请尝试使用以下代码:

<强>关机:

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

您可以使用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应用程序执行此操作。只有使用系统固件签名密钥签名的应用程序才能执行此操作

答案 2 :(得分:2)

这是我用来执行任何系统命令的代码。

void shutdown_sys()
{
    Process chperm;
    try {
        chperm=Runtime.getRuntime().exec("su");
          DataOutputStream os = 
              new DataOutputStream(chperm.getOutputStream());

              os.writeBytes("shutdown\n");
              os.flush();

              chperm.waitFor();

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

从您的Android应用程序调用此功能。如果su在您的系统中正常运行,它将起作用。 如果它不起作用,请告诉我。我没有准备测试的Android基础。但同样适用于重启。所以shutdown也是一个linux shell命令,其中ithink也将在Android中出现..所有最好的

答案 3 :(得分:1)

我认为您的标题和正文中的代码段没有任何相似之处。该片段与KeyGuardManager相关,KeyGuardManager用于锁定和解锁键盘。

要关闭手机,您需要使用PowerManager或SU命令。 (在有根设备上。)

答案 4 :(得分:1)

输入root用户的shell命令后, svc power shutdown 在android 7.1中对我有效

答案 5 :(得分:0)

如果您的设备已植根,那么您可以尝试以下解决方案

<强>关机:

None

<强>重新启动:

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