如何重启非root设备?

时间:2018-03-23 06:35:56

标签: java android android-permissions

在SO和Android文档中阅读了很多答案之后,似乎不可能重新启动设备没有root权限

该应用甚至不会问我是否愿意获得许可。

// 1. Use permission in Manifest
<uses-permission android:name="android.permission.REBOOT" />

// 2. Request permission in MainActivity
if (ContextCompat.checkSelfPermission(this, Manifest.permission.REBOOT) != PackageManager.PERMISSION_GRANTED) {              
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REBOOT}, 1);
}

// 3. Restart on button click
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);

错误:

java.lang.SecurityException: Neither user 10201 nor current process has android.permission.REBOOT.

我错过了任何解决方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:2)

不,如果没有root权限,您无法从Android应用程序执行此操作,但您可以使用以下命令从终端执行此操作:“ adb reboot ”。但是,如果您可以使用root设备,则可以使用以下代码重新启动:

try {
    Process process = Runtime.getRuntime().exec("adb reboot");
} catch (IOException e) {
    e.printStackTrace();
}

如果这在root设备上也失败了,那么你可以通过询问root权限来尝试(在android kitkat 4.4上试过),

try{
            List<String> envList = new ArrayList<String>();
            Map<String, String> envMap = System.getenv();

            for (String envName : envMap.keySet()) {
                envList.add(envName + "=" + envMap.get(envName));
            }

            final String[] environment = (String[]) envList.toArray(new String[0]);

            String command= "reboot";
            Runtime.getRuntime().exec(
                    new String[]{"su", "-c", command},
                    environment).waitFor();
}catch(IOException e){
//catch exception
}