2012-01-27 18 views
26

यह कोड सिस्टम को बूट करने के बाद स्वचालित रूप से एक ऐप चलाएगा, लेकिन बैक बटन दबाए जाने के बाद ऐप बंद हो जाएगा।पृष्ठभूमि में एंड्रॉइड ऐप कैसे चलाएं?

यदि ऐप सामान्य रूप से इसके आइकन पर क्लिक करके चलाया जाता है। यह बैक बटन दबाकर या अन्य ऐप्स चलाने के बाद भी लगातार चलता रहेगा।

public class AutoBoot extends BroadcastReceiver { 
    @Override   
    public void onReceive(Context context, Intent intent) {     
     Intent i = new Intent(context, MyActivity.class); 
     i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i);   
    } 
} 

मेरा प्रश्न कैसे वापस बटन दबाने या अन्य एप्लिकेशन चलाने के बाद भी इस ऑटो रन कोड लगातार चलाने के लिए बनाने के लिए, है?

उत्तर

16

यदि आप पृष्ठभूमि में अपना एप्लिकेशन चलाने के लिए चाहते हैं तो आप शायद Service शुरू कर सकते हैं। पृष्ठभूमि में चल रहे और लंबे समय तक संचालन करने के लिए एंड्रॉइड में सेवा का उपयोग किया जाता है।

अपडेट करें

आप START_STICKY का उपयोग अपने सेवा लगातार चल बनाने के लिए कर सकते हैं।

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    handleCommand(intent); 
    // We want this service to continue running until it is explicitly 
    // stopped, so return sticky. 
    return START_STICKY; 
} 
+0

यह कैसे स्पष्ट रूप से –

+0

को रोका जाएगा, इसके अलावा, मैं रीबूट के बाद सेवा कैसे शुरू करूं? –

4

गतिविधि शुरू करना इस व्यवहार के लिए सही दृष्टिकोण नहीं है। इसके बजाए आपका ब्रॉडकास्ट रिसीवर एक सेवा शुरू करने के इरादे का उपयोग करता है जो यथासंभव लंबे समय तक चल सकता है। (http://developer.android.com/reference/android/app/Service.html#ProcessLifecycle देखें)

भी Persistent service

3

देखें के रूप में पृष्ठभूमि में वैसे भी चलाने वाले एप्लिकेशन को। मैं मान रहा हूं कि आप वास्तव में क्या पूछ रहे हैं कि आप पृष्ठभूमि में ऐप्स को सामान कैसे बनाते हैं। ऐप खोलने के बाद और सिस्टम रीबूट होने के बाद नीचे दिया गया समाधान आपके ऐप को पृष्ठभूमि में सामान देगा।

नीचे, मैं एक पूरी तरह से काम कर रहे उदाहरण के लिए एक लिंक (एक Android स्टूडियो परियोजना के रूप में) जोड़ दिया है

इस विषय एंड्रॉयड डॉक्स के दायरे से बाहर हो रहा है, और वहाँ नहीं है ऐसा लगता है कि इस पर कोई भी व्यापक दस्तावेज़ है। जानकारी कुछ दस्तावेज़ों में फैली हुई है।

निम्नलिखित डॉक्स आप अप्रत्यक्ष रूप से बता ऐसा करने के तरीके: https://developer.android.com/reference/android/app/Service.html

https://developer.android.com/reference/android/content/BroadcastReceiver.html

https://developer.android.com/guide/components/bound-services.html

अपने उपयोग आवश्यकताओं सही हो रही के हितों में, यह ऊपर दस्तावेज़ के महत्वपूर्ण हिस्सा पढ़ने के लिए ध्यान से है: # बाइंडर, # मेसेंजर और घटक नीचे लिंक:

https://developer.android.com/guide/components/aidl.html

यहाँ एक पूरी तरह से काम कर रहे उदाहरण के लिए लिंक (एंड्रॉयड स्टूडियो प्रारूप में) है: http://developersfound.com/BackgroundServiceDemo.zip

इस परियोजना के एक गतिविधि है जो एक सेवा को बांधता है शुरू कर देंगे; एआईडीएल को लागू करना

यह प्रोजेक्ट विभिन्न ऐप्स में आईपीसी के उद्देश्य के लिए पुनः कारक के लिए भी उपयोगी है।

इस परियोजना में, जब एंड्रॉयड पुनरारंभ (ऐप्लिकेशन प्रदान स्थापना के बाद कम से कम एक चलाया जाता है और एप्लिकेशन को SD कार्ड पर स्थापित नहीं है)

इस एप्लिकेशन/परियोजना रिबूट के बाद चलता है स्वचालित रूप से शुरू करने के लिए विकसित की है यह गतिशील रूप से पारदर्शी दृश्य का उपयोग करने के लिए ऐसा लगता है कि ऐसा कोई ऐप शुरू नहीं हुआ है लेकिन संबंधित ऐप की सेवा साफ़ रूप से शुरू होती है।

यह कोड इस तरह से लिखा गया है कि एक निर्धारित सेवा अनुकरण करने के लिए ट्विक करना बहुत आसान है।

यह परियोजना उपर्युक्त दस्तावेज़ों के अनुसार विकसित की गई है और बाद में यह एक साफ समाधान है।

हालांकि इस परियोजना का एक हिस्सा है जो साफ नहीं है: मुझे गतिविधि का उपयोग किए बिना रीबूट पर सेवा शुरू करने का कोई तरीका नहीं मिला है। यदि आप में से कोई भी इस पोस्ट को पढ़ने वाले लोगों के पास ऐसा करने का एक साफ तरीका है तो कृपया एक टिप्पणी पोस्ट करें।

+0

धन्यवाद - मुझे यह सीखने में बहुत दिलचस्पी है। मैं लगभग 1 साल के लिए एंड्रॉइड स्टूडियो में एंड्रॉइड ऐप विकसित कर रहा हूं। मैंने आपके ज़िप को डाउनलोड किया, इसे एक निर्देशिका में रखा, एंड्रॉइड स्टूडियो में उस निदेशक को खोला और निर्माण पर यह त्रुटि प्राप्त हुई। त्रुटि: प्रोजेक्ट ': एप' कॉन्फ़िगर करने में एक समस्या आई। > कॉन्फ़िगरेशन के लिए सभी निर्भरताओं को हल नहीं कर सका ': app: _debugApkCopy'। > com.android.support.constraint नहीं ढूंढ सका: बाधा-लेआउट: 1.0.2। द्वारा आवश्यक: प्रोजेक्ट: ऐप –

+0

मुझे लगता है कि आपके लेआउट में से एक बाधा लेआउट का उपयोग कर रहा है जब बाधा लेआउट निर्भरता आपकी gradle फ़ाइल में नहीं है। यदि यह मामला नहीं है तो आप लेआउट फ़ाइल में बाधा फ़ाइल को ऑर्डिन लेआउट में बदल दें और यदि बाधा को लेआउट से संबंधित लेआउट में कोई गुण हैं तो उन्हें भी हटा दें। – user2288580

+0

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

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