2015-10-07 11 views
6

मेरे एंड्रॉइड एप्लिकेशन में, मैं बटन क्लिक पर अपने एंड्रॉइड डिवाइस को पुनरारंभ करना चाहता हूं। लेकिन यह काम नहीं कर रहा है।
मैंने अभी तक यह किया है।एंड्रॉइड डिवाइस को प्रोग्रामेटिक रूप से पुनरारंभ करें

ImageButton restartmob = (ImageButton) this.findViewById(R.id.restartmob); 
    restartmob.setOnClickListener(new ImageButton.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Process proc = null;    
      try { 
       //proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" }); 
       proc = Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"}); 
       proc.waitFor(); 
      } catch (Exception ex) { 
       Log.i(TAG, "Could not reboot", ex); 
      } 
     } 
    }); 

इसके अलावा मैंने मैनिफेस्ट फ़ाइल में निम्नलिखित अनुमति डाली।

<permission android:name="android.permission.REBOOT"/> 

जब मैंने पुनरारंभ करने के लिए छवि बटन पर क्लिक किया, तो मुझे निम्न अपवाद मिला।

java.io.IOException: Error running exec(). Command: [/system/bin/su, -c, reboot now] 
Working Directory: null Environment: null 
at java.lang.ProcessManager.exec(ProcessManager.java:211) 
at java.lang.Runtime.exec(Runtime.java:173) 
at java.lang.Runtime.exec(Runtime.java:128) 
at com.android.onlinepayment.activity.SystemSubMenuActivity$1.onClick(SystemSubMenuActivity.java:49) 
at android.view.View.performClick(View.java:5184) 
at android.view.View$PerformClick.run(View.java:20910) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:145) 
at android.app.ActivityThread.main(ActivityThread.java:5942)  
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 
Caused by: java.io.IOException: No such file or directory 
at java.lang.ProcessManager.exec(Native Method) 
at java.lang.ProcessManager.exec(ProcessManager.java:209) 
... 13 more 

मेरे कोड में क्या गलत है? कृपया इस पर मेरी सहायता करें।
जानकारी के लिए, मैं एंड्रॉइड लॉलीपॉप (यदि यह मायने रखता है) पर परीक्षण कर रहा है।
अग्रिम में धन्यवाद।

+1

यह उत्तर देखें: http://stackoverflow.com/questions/4966486/reboot-the-phone-on-a-button-click – wblaschko

उत्तर

3

इस प्रयास करें ...

try { 
     Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", "reboot" }); 
     proc.waitFor(); 
     } catch (Exception ex) { 
       Log.i(TAG, "Could not reboot", ex); 
     } 

जोड़े अनुमति रिबूट

+0

मैंने भी कोशिश की है। लेकिन एक ही अपवाद देता है। – Suniel

+0

एंड्रॉइड 2.2 में काम करता है ... –

+0

क्या यह एंड्रॉइड संस्करण पर निर्भर है? असल में मैं एंड्रॉइड 5.0.1 – Suniel

7

अनुमति आप आवश्यक अपने रिबूट विधि से संबंधित नहीं है, के रूप में अपने विधि (su साथ) एक निहित फोन की आवश्यकता है। फ़ोन को रीबूट करने के लिए, आपके द्वारा की गई अनुमति की आवश्यकता होती है, लेकिन PowerManager#reboot पर कॉल करें।

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
pm.reboot(null); 
+1

मुझे यह अपवाद मिला: java.lang.SecurityException: न तो उपयोगकर्ता 10695 और न ही वर्तमान प्रक्रिया में android.permission.REBOOT है। – Suniel

+0

सुनिश्चित करें कि आपके पास मेनिफेस्ट फ़ाइल में अनुमति है। – MByD

+0

मुझे मैनिफेस्ट फ़ाइल में अनुमति है। – Suniel

1

आप सामान्य एसडीके एप्लिकेशन से रीबूट नहीं कर सकते हैं। केवल सिस्टम फर्मवेयर साइनिंग कुंजी के साथ हस्ताक्षरित एप्लिकेशन ही ऐसा कर सकते हैं। इस जवाब से कॉपी किया गया,

Programmatically switching off Android phone

आप अपने ऐप के हस्ताक्षर करने के लिए प्रणाली कुंजी की जरूरत है। जानकारी के लिए यह पोस्ट देखें;

How to compile Android Application with system permissions

2

लम्बे संघर्ष के बाद मैं काम कर समाधान मिल गया।

यदि आपका सिस्टम सीरियल पोर्ट प्रयोग किया जाता है तो आदेश नीचे निष्पादित,

Runtime.getRuntime().exec(new String[]{"/system/bin/su","-c","reboot now"}); 

अगर उपयोग सामान्य बंदरगाह तो excure आदेश नीचे

Runtime.getRuntime().exec(new String[]{"/system/xbin/su","-c","reboot now"}); 

अंतर केवल /bin और है /xbin

तो अगर कोड कमांड फेंक अपवाद तो दूसरे को निष्पादित कर सकता है तो कोड कर सकता है।

+0

पर काम नहीं करता है, मुझे कोई अंतर नहीं दिख रहा है .... – nrofis

+1

क्या आप एक बार फिर से जांच सकते हैं, मैंने टाइपो को सही किया –

5

एपीआई 24 पर यदि आपका ऐप्स डिवाइस स्वामी एप्लिकेशन को आप कॉल कर सकते हैं है: devicePolicyManager.reboot(yourAdminComponent)

देखें डॉक्स here

0

आप पौराणिक LibSuperUser लाइब्रेरी का उपयोग कर सकते हैं।

लिखें इस सरल कोड:

Shell.SU.run("reboot"); 
0

आप <permission ... /> कर रहे हैं। आपको <USES-permission ... />

कैप्स की आवश्यकता नहीं है, यह केवल उस पर जोर देना था।

संबंधित मुद्दे