2011-01-02 20 views
12

मैं जानना चाहता हूं कि कोड के माध्यम से डिवाइस को रीबूट करने का कोई तरीका है या नहीं। Ive की कोशिश की:एंड्रॉइड 2.2: रीबूट डिवाइस प्रोग्रामेटिक रूप से

Intent i = new Intent(Intent.ACTION_REBOOT); 
i.putExtra("nowait", 1); 
i.putExtra("interval", 1); 
i.putExtra("window", 0); 
sendBroadcast(i); 

और REBOOT के लिए अनुमतियों को जोड़ा है, लेकिन यह अभी भी काम नहीं करता है।

धन्यवाद

+1

मुझे लगता है कि मुझे "प्लेटफ़ॉर्म प्रमाणपत्र" के साथ अपने ऐप पर हस्ताक्षर करने की आवश्यकता है। क्या कोई मुझे बता सकता है कि इसे कैसे करना है? मैं इस ऐप को बाजार पर जारी करने की योजना नहीं बना रहा हूं, मुझे बस अपने एंड्रॉइड टैबलेट के लिए इसकी आवश्यकता है। धन्यवाद – Johan

+14

यदि यह एक एचटीसी डिजायर है, तो आप जीपीएस चालू कर सकते हैं और ओपनजीएल के साथ कुछ 3 डी प्रतिपादन कर सकते हैं। संयोजन से फोन तेजी से गर्म हो जाएगा जिससे बदले में रीबूट हो जाता है। –

+0

अनुभव के माध्यम से, एंड्रॉइड 2.2 (या 2.3) डिवाइस स्वचालित रूप से रीबूट हो जाएगा यदि पर्याप्त लंबित इरादे बताए गए हैं कि आप सर्विसिंग नहीं कर रहे हैं (उदाहरण के लिए, यदि आपके थ्रेड को संसाधित करने के लिए थ्रेड किसी अन्य चीज़ पर अवरुद्ध है)। यह नहीं कि डिवाइस को रीबूट करने के लिए यह वास्तव में एक * स्वीकार्य * तरीका है। – Michael

उत्तर

-4

तो फोन निहित है, यह वास्तव में बहुत सरल है:

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

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

+0

मैंने यह कोशिश की, उसने सुपर उपयोगकर्ता अनुमति मांगी, एक टोस्ट संदेश दिखाया गया है कि 'एप्लिकेशन को सुपर उपयोगकर्ता अनुमति दी गई है', फिर कोई अपवाद नहीं पकड़ा गया, लेकिन फोन रीबूट नहीं हुआ। –

+1

यह काम नहीं करता है। –

+1

काम नहीं करता है ... – JPM

35

यह मेरे लिए काम करने के लिए लग रहा था:

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

हाँ यह काम करता है !! अन्य जवाब नहीं है। – JPM

+0

सहमत हैं। बाकी मेरे लिए काम नहीं करता है। – TonyTakeshi

+3

रूट की आवश्यकता है। –

-1

यहाँ एक समाधान है। याद रखें, डिवाइस जड़ होना चाहिए।

try{ 
    Process p = Runtime.getRuntime().exec("su"); 
    OutputStream os = p.getOutputStream();          
    os.write("reboot\n\r".getBytes()); 
    os.flush(); 
}catch(IOException) 
0
फिर भी रूट किए गए डिवाइस के लिए

, लेकिन मामले में आप चाहते हैं सुरक्षित (process.waitFor() वातानुकूलित है, अलग कोशिश पकड़ में, हम उचित अपवाद हैंडलिंग है, "अब" रिबूट के बाद आदेश में कहा, जो है आवश्यक कुछ उपकरणों, आदि) और शायद क्लीनर कोड के लिए, इस पर एक नज़र डालें:

Process rebootProcess = null; 
try 
{ 
    rebootProcess = Runtime.getRuntime().exec("su -c reboot now"); 
} 
catch (IOException e) 
{ 
    // Handle I/O exception. 
} 

// We waitFor only if we've got the process. 
if (rebootProcess != null) 
{ 
    try 
    { 
     rebootProcess.waitFor(); 
    } 
    catch (InterruptedException e) 
    { 
     // Now handle this exception. 
    } 
} 
0

आप संभवतः यह रिबूट बनाने के लिए PowerManager इस्तेमाल कर सकते हैं (यह गारंटी नहीं है कि यह रिबूट जाएगा - ओएस रद्द कर सकते हैं यह): links
link #2

+2

काम नहीं करता है लिंक के समय के साथ लिंक के मामले में लिंक के साथ उपयोगी कोड जोड़ें। –

0

मैं ज़ैमरिन का उपयोग कर रहा हूं। मेरे लिए समाधान है:

Java.Lang.Runtime.GetRuntime().Exec(new String[] { "/system/xbin/su", "-c", "reboot now" }); 
संबंधित मुद्दे