在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.
我错过了任何解决方法吗?
非常感谢!
乙
答案 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
}