1. 程式人生 > >Android 重啟系統裝置 或APP

Android 重啟系統裝置 或APP

原始碼下載:

https://download.csdn.net/download/qq_31939617/10481352下載

第一種方法:

記得有一本書上介紹 說 0許可權重啟手機,原理是 在android 系統中,當顯示一個toast,其實是將該toast掛載到窗體上, 而窗體又是系統的一個服務, 如果單位時間內不斷地向窗體上掛載toast,就會不斷的申請系統記憶體,導致系統重新啟動。

[java] view plain copy print?
  1. privatevoid anr() {  
  2.         while (true) {  
  3.             System.out.println(”running.. ”
    );  
  4.             Toast toast = new Toast(getApplicationContext());  
  5.             View toastView = new View(getApplicationContext());  
  6.             toast.setView(toastView);  
  7.             toast.show();  
  8.         }  
  9.     }  

使用小米3真機測試過之後,發現只會導致程式ANR,並不能實現裝置重新啟動.

第二種方法:

使用SU,改方法需要應用獲取ROOT許可權

http://stackoverflow.com/questions/5484535/runtime-exec-reboot-in-android

[java] view plain copy print?
  1. publicstaticvoid rebootSU() {  
  2.         Runtime runtime = Runtime.getRuntime();  
  3.         Process proc = null;  
  4.         OutputStreamWriter osw = null;  
  5.         StringBuilder sbstdOut = new StringBuilder();  
  6.         StringBuilder sbstdErr = new StringBuilder();  
  7.         String command=”/system/bin/reboot”
    ;  
  8.         try { // Run Script
  9.             proc = runtime.exec(”su”);  
  10.             osw = new OutputStreamWriter(proc.getOutputStream());  
  11.             osw.write(command);  
  12.             osw.flush();  
  13.             osw.close();  
  14.         } catch (IOException ex) {  
  15.             ex.printStackTrace();  
  16.         } finally {  
  17.             if (osw != null) {  
  18.                 try {  
  19.                     osw.close();  
  20.                 } catch (IOException e) {  
  21.                     e.printStackTrace();                      
  22.                 }  
  23.             }  
  24.         }  
  25.         try {  
  26.             if (proc != null)  
  27.                 proc.waitFor();  
  28.         } catch (InterruptedException e) {  
  29.             e.printStackTrace();  
  30.         }  
  31.         sbstdOut.append(new BufferedReader(new InputStreamReader(proc  
  32.                 .getInputStream())));  
  33.         sbstdErr.append(new BufferedReader(new InputStreamReader(proc  
  34.                 .getErrorStream())));  
  35.         if (proc.exitValue() != 0) {  
  36.         }  
  37.     }  

第三,原理同上,需要ROOT許可權, runtime是用來執行linux  shell命令的,通過它可以實現對裝置的相關操作

相關文章

[java] view plain copy print?
  1. privatevoid restart() {   
  2.         String cmd = ”su -c reboot”;  
  3.         //              String cmd = “su -c shutdown”;
  4.         try {  
  5.             Runtime.getRuntime().exec(cmd);  
  6.         } catch (IOException e) {  
  7.             new AlertDialog.Builder(getApplicationContext()).setTitle(“Error”).setMessage(  
  8.                     e.getMessage()).setPositiveButton(”OK”null).show();  
  9.         }  
  10.     }  

第四種, 使用powerManger 來重啟裝置,同樣的需要在配置檔案中,新增許可權 android.permission.REBOOT

http://developer.android.com/reference/android/os/PowerManager.html#reboot(java.lang.String)