为什么我的应用程序会抛出 `android.permission.REBOOT SecurityException` 异常?

5
我写了一个使用android.os.PowerManager.reboot()的Android应用程序,并在我的AndroidManifest.xml中添加了<uses-permission android:name="android.permission.REBOOT" />。然而,当我运行应用程序时,它总是抛出以下异常:
java.lang.SecurityException: Neither user 10039 nor current process has android.permission.REBOOT. at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1235)
at android.os.IPowerManager$Stub$Proxy.reboot(IPowerManager.java:427)
at android.os.PowerManager.reboot(PowerManager.java:481)
at Test.testPower(Test.java:374)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
at android.os.Parcel.readException(Parcel.java:1247)
at android.os.Parcel.readException(Parcel.java:1235)
at android.os.IPowerManager$Stub$Proxy.reboot(IPowerManager.java:427)
at android.os.PowerManager.reboot(PowerManager.java:481)
at com.fsl.cts.FSLPlaybackTest.testPower(FSLPlaybackTest.java:374)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:204)
at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:194)
at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:186)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)

我是否做错了什么,还是froyo在重新启动时存在一些问题?


1
你在清单文件中添加了什么内容?能否把它发布出来? - RoflcoptrException
6个回答

9

您无法获得此权限。只有系统应用程序和使用与签署固件相同的密钥签署的应用程序才能获得该权限。

为什么需要重新启动?如果您说明重新启动的必要性,那么可能有人可以建议您在不重新启动的情况下完成相同的事情的更好方法。


6

在原生Android手机上无法完成此操作。但是,正如我在其他类似的问题中发布的内容一样,如果手机已经获取了Root权限,那么您就没有任何问题:

try {
    Runtime.getRuntime().exec("su");
    Runtime.getRuntime().exec("reboot"); }
catch (IOException e) { }

需要解释的话,请点击上面的链接。


3
据我所知,这个权限只能授予系统应用程序,“用户应用程序”无法获得该权限。

2

1

它可以工作:

 String cmd = "su -c shutdown";
         try{
         Runtime.getRuntime().exec(cmd);
   }catch(IOException e){
       e.printStackTrace();
   }
         }

否则,您必须将 android:sharedUserId="android.uid.system" 添加到您的应用程序中。

0
如果您拥有 root 权限,您可以使用以下任何命令:
“hard root”:
reboot

"软重启":

setprop ctl.restart surfaceflinger; setprop ctl.restart zygote

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接