2012-03-07 12 views
7

जड़ उपयोगकर्ता के लिए मेरे Android एप्लिकेशन पर, मैं साथएंड्रॉयड जड़ poweroff

su reboot -p 

ठीक काम करता है एक बंद करते हैं, लेकिन मैंने देखा है के रूप में बंद एनीमेशन प्रदर्शित होने से विरोध किया फोन लगभग तुरंत बंद है कि (, और शायद अन्य सामान कर रहे हैं)।

क्या यह एंड्रॉइड फोन को प्रोग्रामेटिक रूप से बंद करने का सही तरीका है? क्या कुछ महत्वपूर्ण कोड हैं जिन्हें शटडाउन से पहले निष्पादित करने की आवश्यकता है?

+0

@unforgettableid अपने प्रस्तावित संपादन दोनों को गंभीरता से गलत (क्षुधा, रूट के रूप में कभी नहीं चला सकते हैं केवल ज्यादा से ज्यादा देशी सहायकों), और अपेक्षाकृत व्यर्थ है क्योंकि यह कम मूल्य का 4 साल पुराना प्रश्न है जिसे पुनरीक्षित करने की आवश्यकता नहीं है। –

+0

@ChrisStratton: मुझे सुधारने के लिए धन्यवाद; मैंने अपना संपादन सुझाव संशोधित कर दिया है। एक गिटहब कमेंटर ने इस पिछले फरवरी में एक [गिटहब टिप्पणी] (https://github.com/ppareit/Shutdown/issues/4#issuecomment-188899438) में इस स्टैक ओवरफ़्लो थ्रेड का संदर्भ दिया है। मैं मानता हूं कि गिटहब कमेंटर के लिए इस तरह के एक प्राचीन धागे को संदर्भित करने के लिए मूर्खतापूर्ण थी। फिर भी, उसने इसका संदर्भ दिया। चूंकि उत्तर इतने पुराने थे, किसी और ने अपना समय एक ओपन-सोर्स प्रोजेक्ट को उप-सर्वोच्च प्रतिबद्धता बर्बाद कर दिया। – unforgettableid

+0

@ChrisStratton: मैंने Google खोज की लेकिन मुझे कोई नया थ्रेड नहीं मिला जो 'svc power shutdown' समाधान का उल्लेख करता है। यदि भविष्य में ऐसा धागा मौजूद है, तो हमें इस प्राचीन धागे को उस नए धागे के डुप्लिकेट के रूप में चिह्नित करना चाहिए। यह बहुत बुरा है कि Google इतनी उच्च खोज-परिणाम रैंकिंग इतनी प्राचीन है कि स्टैक ओवरफ़्लो थ्रेड को इतनी प्राचीन है। शायद हम शीर्ष पर कुछ बालों वाली सामग्री चेतावनी जोड़ सकते हैं। या, बेहतर अभी तक, शायद हमें पुराने प्रश्नों को नए समान प्रश्नों के डुप्लिकेट के रूप में ध्वजांकित करना चाहिए। – unforgettableid

उत्तर

0

एंड्रॉयड स्रोत कोड में, आपको निम्न पा सकते हैं:

/** 
* Low-level function turn the device off immediately, without trying 
* to be clean. Most people should use 
* {@link android.internal.app.ShutdownThread} for a clean shutdown. 
* 
* @deprecated 
* @hide 
*/ 
@Deprecated 
public static native void shutdown(); 

मुझे लगता है कि यह देशी समारोह अपने su reboot -p से मेल खाती है कि। इसके अलावा, आप उद्धृत कोड टिप्पणी से देख सकते हैं कि आपको क्लीन शट डाउन करने के लिए शटडाउन थ्रेड का उपयोग करना चाहिए।

शटडाउन थ्रेड में, एंड्रॉइड चीजों का एक गुच्छा करता है।

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

इस प्रकार, आप देख सकते हैं कि su reboot -p करना गलत है।

+0

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

+0

आपने अभी पूछा है कि आपका दृष्टिकोण सही है या नहीं। मैंने आपको दिखाया कि ऐसा करने का अच्छा अभ्यास क्यों नहीं है। मैंने आपको यह नहीं बताया कि 'शटडाउन()' विधि आपके मामले में काम करेगी। – Yury

+0

मैंने आपका जवाब स्वीकार कर लिया है, हालांकि मेरा प्रश्न "बंद करने का सबसे अच्छा अभ्यास क्या होना चाहिए?", लेकिन कोई भी उस प्रश्न का उत्तर देने में सक्षम नहीं है ... :( – michelemarcon

0

यहाँ देखें: http://developer.android.com/reference/android/os/PowerManager.html

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
pm.reboot("Because I want you to reboot!") 

यह काम करना चाहिए।

+0

क्षमा करें, मुझे अभी पता चला है कि यह केवल ऐप के लिए काम करता है जो उपयोगकर्ता ऐप्स के बजाय "सिस्टम ऐप्स" के रूप में हस्ताक्षरित है। (यह केवल तभी संभव है जब आप फर्मवेयर पर हस्ताक्षर किए गए कुंजी को जानते हों) – devsnd

+1

यह काम नहीं करेगा, क्योंकि किसी तीसरे पक्ष के आवेदन के पास ऐसा करने का अधिकार नहीं है। –

0

एंड्रॉइड 4.3 या बाद में, डिवाइस को बंद करने का शायद एक बेहतर तरीका है।

आपके ऐप को सिस्टम ऐप के रूप में स्थापित करने की आवश्यकता नहीं है, लेकिन इसमें रूट विशेषाधिकार होना चाहिए। आप बस आदेश डिवाइस को बंद करने में रूट के रूप में यह एक आदेश चला सकते हैं:

svc power shutdown

मैं उसका जवाब elsewhere जो मुझे इस शेल कमांड के अस्तित्व की खोज के लिए प्रेरित करने के लिए Firelord धन्यवाद।

मुझे लगता है कि यह एक सुंदर शटडाउन करेगा, लेकिन मुझे यकीन नहीं है। शायद यह अचानक बंद हो जाएगा। स्पष्टीकरण के लिए कृपया परीक्षण करें, और फिर edit this answer

इसके अलावा, उपरोक्त खोल कमांड Android 4.2.2 या इससे पहले में काम नहीं करता है। help text इसका उल्लेख नहीं करता है। svc कमांड को अमान्य के रूप में अस्वीकार करता है और सहायक होने का प्रयास करने के लिए कुछ सहायता टेक्स्ट दिखाता है।

1

अपने अनुप्रयोग निहित है, तो रूट के रूप में निम्नलिखित चलाएँ:

am start -a android.intent.action.ACTION_REQUEST_SHUTDOWN

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