2010-08-11 211 views
5

我寫了一個使用android.os.PowerManager.reboot()的Android應用程序,並在AndroidManifest.xml中添加了<uses-permission android:name="android.permission.REBOOT" />。然而,當我運行的應用程序,它總是拋出以下異常:爲什麼我的應用程序拋出一個`android.permission.REBOOT SecurityException`?

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 2010-08-11 08:21:10

回答

3

據我所知,這個權限只能被磨碎到系統應用,「用戶應用」不能獲得該權限

9

你不能把這個權限。只有用於簽署固件的相同密鑰簽署的系統應用程序和應用程序才能獲得該許可。

爲什麼你需要重新啓動?如果你說重新啓動的必要性,那麼可能有人會建議你一個更好的方式來完成同樣的事情而不用重新啓動。

5

它不能在股票Android手機完成。但是,正如我張貼在其他類似的question,如果手機紮根,那麼你就完全沒有問題:

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

有關說明,按照上面的鏈接。

+0

這不起作用 – 2016-12-10 07:25:16

1

它可以工作:

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

否則,您必須添加android:sharedUserId="android.uid.system"到應用程序

0

如果你有根,你可以使用任何這些命令:

「硬根」:

reboot 

「軟重啓」:你到底有在清單中添加

setprop ctl.restart surfaceflinger; setprop ctl.restart zygote 
相關問題