【问题标题】:Why does my app throw an `android.permission.REBOOT SecurityException`?为什么我的应用会抛出 `android.permission.REBOOT SecurityException`?
【发布时间】:2011-03-28 06:06:30
【问题描述】:

我编写了一个使用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 重启有问题?

【问题讨论】:

  • 您在清单文件中究竟添加了什么?可以发一下吗?

标签: android permissions reboot


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在现有的 android 手机中无法做到这一点。但是,正如我在其他类似的question 中发布的那样,如果手机已root,那么您完全没有问题:

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

      如需说明,请点击上面的链接。

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          它可以工作:

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

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

          【讨论】:

            【解决方案6】:

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

            “硬根”:

            reboot
            

            “软重启”:

            setprop ctl.restart surfaceflinger; setprop ctl.restart zygote
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-25
              相关资源
              最近更新 更多