Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何重新启动非根设备?_Java_Android_Android Permissions - Fatal编程技术网

Java 如何重新启动非根设备?

Java 如何重新启动非根设备?,java,android,android-permissions,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,

在阅读了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);
有没有我错过的解决办法

多谢各位


B.

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

try {
    Process process = Runtime.getRuntime().exec("adb reboot");
} catch (IOException e) {
    e.printStackTrace();
}
如果这在根设备上也失败了,那么你可以通过请求根权限来尝试(在android kitkat 4.4上尝试过)

试试看{
List envList=new ArrayList();
Map envMap=System.getenv();
for(字符串envName:envMap.keySet()){
添加(envName+“=”+envMap.get(envName));
}
最终字符串[]环境=(字符串[])envList.toArray(新字符串[0]);
String命令=“重新启动”;
Runtime.getRuntime().exec(
新字符串[]{“su”,“-c”,command},
waitFor();
}捕获(IOE异常){
//捕获异常
}

没有root,您就无法重新启动设备。我唯一能想到的是DevicePolicyManager,它可以在没有根的情况下工作。
try {
    Process process = Runtime.getRuntime().exec("adb reboot");
} catch (IOException e) {
    e.printStackTrace();
}
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
}