दिलचस्प पोस्ट
जावा: घूर्णन चित्र सेवा कार्यकर्ता जावास्क्रिप्ट अद्यतन आवृत्ति (प्रत्येक 24 घंटे?) पूर्णांक प्रभाग का व्यवहार क्या है? कैसे सीतनिद्रा में होना एकाधिक डेटाबेस से कनेक्ट करने के लिए क्या "जीआईटी पुल – सभी" मेरी सभी स्थानीय शाखाओं को अपडेट कर सकता है? पायथन में मैं विधि ओवरलोडिंग का उपयोग कैसे करूं? हम क्यों पीस स्क्रिप्ट में sys.setdefaultencoding ("utf-8") का उपयोग नहीं करना चाहिए? स्टोरीबोर्ड के साथ टैब बार नियंत्रक में चयनित छवि को सेट करना प्रोटोमज में तत्व दृश्यता के लिए कैसे इंतजार करना स्थिर बनाम एक्सटर्न "सी" / "सी ++" एंड्रॉइड: वरीयता खंड चौड़ाई को अधिकतम कैसे करें (या मार्जिन से छुटकारा)? एक्लिप्स में जेबीस डिबगिंग ASP.NET MVC 3 रेज़र के साथ Ajax.BeginForm का उपयोग करना MySQL डाटाबेस के साथ पायथन 3.4.0 डॉकर – कॉर्पोरेट नेटवर्क पर छवि निर्माण के दौरान नेटवर्क कॉल विफल

रनटाइम.एक्सएसी (): एंड्रॉइड में रिबूट करें?

मैं एक ऐसे समाधान की तलाश कर रहा हूं जिसका उपयोग रूटेड डिवाइस को रिबूट करने के लिए किया जा सकता है। मुझे पता है कि युक्ति को रिबूट करना उपयोगकर्ता के लिए बहुत खराब डिज़ाइन है, जैसा कि यहां बताया गया है , और वास्तव में किसी एप्लिकेशन के लिए नहीं है मुख्य उद्देश्य अपने परीक्षणों के दौरान फोन रिबूट करना है (मैं एक वीडियो चैट एप्लिकेशन पर काम करता हूं, और कभी-कभी मुझे रीबूट करने की आवश्यकता होती है जब सब कुछ दक्षिण में जाता है)

मैंने देखा कि फ़ोन को रिबूट करना ACTION_REBOOT के साथ रिबूट की सामान्यता से गुजरने की तुलना में टर्मिनल ( adb shell या कनेक्टबॉट उदाहरण के लिए) में रिबूट का बहुत दूर है , कि मैं वैसे भी उपयोग नहीं कर सकता।

फिलहाल, मैं सुपरयुजर विशेषाधिकार प्राप्त करने में सक्षम हूं, साथ में

 Process root = Runtime.getRuntime().exec("su"); 

लेकिन मैं वास्तविक रिबूट नहीं कर सकता मैं जी 1 (एचटीसी) और गैलेक्सी एस (सैमसंग) पर बिना किसी सफलता के प्रयास करता हूं। मैं /system/bin/reboot में रिबूट निष्पादन योग्य स्थित है

मेरे कुछ प्रयास यहां दिए गए हैं:

 Process reboot = Runtime.getRuntime().exec("/system/bin/reboot"); Process reboot = Runtime.getRuntime().exec("reboot"); Process reboot = Runtime.getRuntime().exec("su reboot"); 

मैं रनटाइम। एक्सएसी () के नुकसान के बारे में इस लेख को पढ़ता हूं, लेकिन मुझे लगता है कि मैं इस मामले में नहीं हूं।

कनेक्टबॉट का उपयोग करने से मुझे ऐसी कार्रवाई करने में सक्षम हो जाता है, मुझे पूरा यकीन है कि यह संभव है। कृपया मुझे बताने के लिए और कनेक्टबॉट कोड को न देखें , यह एक बड़ी और जटिल परियोजना है 🙂

क्या आप इस मुद्दे के साथ मेरी मदद कर सकते हैं?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "रनटाइम.एक्सएसी (): एंड्रॉइड में रिबूट करें?"

रिबूट Android में ठीक काम करता है आप संभवतः runtime.exec () ठीक से नहीं कर रहे हैं आप को संभालने की जरूरत है

  public static void rebootSU() { Runtime runtime = Runtime.getRuntime(); Process proc = null; OutputStreamWriter osw = null; StringBuilder sbstdOut = new StringBuilder(); StringBuilder sbstdErr = new StringBuilder(); String command="/system/bin/reboot"; try { // Run Script proc = runtime.exec("su"); osw = new OutputStreamWriter(proc.getOutputStream()); osw.write(command); osw.flush(); osw.close(); } catch (IOException ex) { ex.printStackTrace(); } finally { if (osw != null) { try { osw.close(); } catch (IOException e) { e.printStackTrace(); } } } try { if (proc != null) proc.waitFor(); } catch (InterruptedException e) { e.printStackTrace(); } sbstdOut.append(ReadBufferedReader(new InputStreamReader(proc .getInputStream()))); sbstdErr.append(ReadBufferedReader(new InputStreamReader(proc .getErrorStream()))); if (proc.exitValue() != 0) { } } 

अंत में खोज के कुछ हफ्तों के बाद:

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

मुझे लगता है मैं प्रोग्राम को रीबूट नहीं कर सकता

इसके अलावा, मैं टर्मिनल एमुलेटर ऐप का इस्तेमाल करते हुए अपने एंड्रॉइड फोन पर एक टर्मिनल विंडो खोल सकता हूं, टाइप करें, रूट एक्सेस के लिए # प्रॉम्प्ट प्राप्त करें और फिर "#reboot" टाइप करें और मुझे "अनुमति नहीं है" प्रतिक्रिया मिलती है!

कोई सुझाव?

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

यह कोड सैमसंग गैलेक्सी एस 2, एस 4, सोनी एक्सपीरिया एस (एलटीआई 26) पर काम करता है।

 public static void rebootDevice() { try { Process process = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(process.getOutputStream()); os.writeBytes("reboot \n"); } catch (Throwable t) {t.printStackTrace;} } 

लंबे समय तक संघर्ष के बाद मुझे काम का समाधान मिला।

यदि आपके सिस्टम को सीरियल पोर्ट का इस्तेमाल किया जाता है तो कमांड के नीचे चलाया जाता है,

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

यदि सामान्य पोर्ट का उपयोग करें तो नीचे दिए गए आदेश को कम करें

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

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

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