我正在创建app(仅适用于Android 6),我必须使用按钮点击提供重启功能。 我使用以下代码:
PowerManager pm =(PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
并添加了权限:
uses-permission android:name="android.permission.REBOOT",
uses-permission android:name="android.permission.DEVICE_POWER" ,
uses-permission android:name="android.permission.MODIFY_PHONE_STATE"
但是收到以下错误:
java.lang.SecurityException:既不是用户10298也不是当前进程 有android.permission.REBOOT。
答案 0 :(得分:2)
请尝试
try {
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("reboot");
} catch (IOException e) {
}
Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"});
如果不起作用:Runtime.getRuntime().exec(new String[]{"su","-c","reboot now"});
而不是
您可以使用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
必须能够重启设备。不适用于第三方应用程序。常量值:" android.permission.REBOOT"
您无法从普通的SDK应用程序执行此操作。只有使用系统固件签名密钥签名的应用程序才能执行此操作。
您需要使用System Firmware Key
对自己的应用进行签名。但是,您的应用可能具有Root
权限。尝试使用以下代码(如果您有SU访问权限):
<强>关机:强>
try {
Process proc = Runtime.getRuntime()
.exec(new String[]{ "su", "-c", "reboot -p" });
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
<强>重新启动:强>
相同的代码,只需使用"reboot"
代替"reboot -p"
。
这些不适用于股票HTC ROM,但尚未确认
答案 1 :(得分:1)
如果您运行Android M(API 23),则必须为重新启动设置运行时权限。
如果设备运行的是Android 6.0或更高版本,并且您的应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须在应用运行时请求其所需的每个危险权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用也可以继续以有限的功能运行。
答案 2 :(得分:0)
您无法从普通的SDK应用程序重新启动。只有使用系统固件签名密钥签名的应用程序才能执行此操作 复制了这个答案,
Programmatically switching off Android phone
您需要使用系统密钥对您的应用进行签名。有关详细信息,请参阅此帖子;
How to compile Android Application with system permissions
首先,创建一个文件device_owner.xml,其中包含以下内容:
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<device-owner package="your.owner.app.package.id" name="Your app name" />
现在执行以下步骤
adb push device_owner.xml / sdcard /
adb shell
苏
cp /sdcard/device_owner.xml / data / system /
cd / data / system /
chown system:system device_owner.xml
重新启动
注意:在重新启动设备之前,请确保已安装了您尝试设备所有者的应用程序。如果你不这样做,你将获得无限时间的启动动画。
答案 3 :(得分:0)
`Process proc = null;
try {
proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" });
try {
proc.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}`
答案 4 :(得分:-2)
这是我的答案和可能对您有帮助的代码:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.REBOOT)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REBOOT}, 1);
if(ContextCompat.checkSelfPermission(this, Manifest.permission.REBOOT)
!= PackageManager.PERMISSION_GRANTED) {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
}
} else {
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
pm.reboot(null);
}