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

时间:2010-08-11 08:05:58

标签: android permissions reboot

我编写了一个使用android.os.PowerManager.reboot()的Android应用,并在<uses-permission android:name="android.permission.REBOOT" />中添加了AndroidManifest.xml。但是,当我运行应用程序时,它总是抛出以下异常:

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重启时有问题吗?

6 个答案:

答案 0 :(得分:9)

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

为什么需要重启?如果你说有必要重新启动,那么可能有人可以建议你一个更好的方法来完成同样的事情,而无需重新启动。

答案 1 :(得分:5)

它无法在现货Android手机中完成。但是,正如我在其他类似question中发布的那样,如果手机已植根,那么你根本没有问题:

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

有关说明,请点击上面的链接。

答案 2 :(得分:3)

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

答案 3 :(得分:2)

使用代码重启设备需要REBOOT权限。

此权限适用于系统应用程序。只有在构建系统映像时使用证书,才能使应用程序成为系统应用程序。

  1. 请查看以下链接,了解使用平台证书https://groups.google.com/d/msg/android-developers/wsRr-VhzKZ4/dAUbLPszOQ8J
  2. 签署的应用程序
  3. http://developer.android.com/guide/topics/security/security.html

答案 4 :(得分:1)

它可以工作:

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

其他,您必须将android:sharedUserId="android.uid.system"添加到您的应用程序

答案 5 :(得分:0)

如果您有root用户,则可以使用以下任何命令:

“硬根”:

reboot

“软重启”:

setprop ctl.restart surfaceflinger; setprop ctl.restart zygote