5

android.os.PowerManager.reboot()我编写了一个<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重启有问题?

4

6 回答 6

9

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

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

于 2010-08-11T12:55:03.360 回答
6

它不能在库存的 android 手机中完成。但是,正如我在其他类似问题中发布的那样,如果手机已植根,那么您完全没有问题:

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

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

于 2011-01-23T07:47:55.770 回答
3

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

于 2010-08-11T09:58:21.593 回答
2

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

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

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

它可以工作:

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

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

于 2012-05-17T16:14:17.693 回答
0

如果你有 root,你可以使用这些命令中的任何一个:

“硬根”:

reboot

“软重启”:

setprop ctl.restart surfaceflinger; setprop ctl.restart zygote
于 2014-11-03T23:06:18.773 回答