执行Runtime.getRuntime().exec(“su -c reboot”);后设备没有重启,想问下有没有其他方法可以做到重启设备?
JAVA控制重启有两种方法,一种是用run命令,一种是发广播的方式
- 方法一 (不会有重启的对话框弹出,该方法在我的应用里面验证是可以的,但是我的应用有系统签名)
try {
Process proc = Runtime.getRuntime().exec(new String[]{"reboot"});
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
- 方法二 (会有重启的对话框弹出,不过会自动重启,不用手动确认)
try {
Intent intent1 = new Intent(Intent.ACTION_REBOOT);
intent1.putExtra("nowait", 1);
intent1.putExtra("interval", 1);
intent1.putExtra("window", 0);
context.sendBroadcast(intent1);
} catch (Exception e){
e.printStackTrace();
}
2 Likes
1、第一种方法试过了,估计是系统签名的问题,我的应用没有足够的权限所以方法无效;
2、第二种方法用的时候会抛异常:java.lang.SecurityException: Permission Denial: not allowed to send broadcast android.intent.action.REBOOT,在AndroidManifest.xml里面添加android.permission.REBOOT则提示Permission is only granted to system app.
如果采用第二种发广播的形式的话,你要在你的应用的AndroidManifest.xml文件里面增加
android:sharedUserId="android.uid.system"
android:sharedUserId="android.uid.system"
加这个后apk在安装时会提示install failed shared userid incompatible,估计还是绕不开签名问题。
我手上有一个老化重启的应用,采用广播形式的,不管是amlgoic平台还是rockchip平台都是可以用的,应该不存在签名的问题,下午我再确认一下回复你
方法一是OK的,方法二需要签名,你用方法一验证一下,不要加su -c
1 Like
Ok,我下午的时候验证一下方法一, 谢谢。