2011-03-13 11 views
45

मैं आने वाले एसएमएस की निगरानी कर रहा हूं।स्टार्टअप पर एंड्रॉइड ब्रॉडकास्ट रिसीवर - गतिविधि में पृष्ठभूमि होने पर चलते रहें

मेरा ऐप BroadcastReceiver के साथ पूरी तरह से काम कर रहा है। हालांकि यह एक गतिविधि से काम कर रहा है और BroadcastReceiver हर समय चल रहा है (और न केवल जब मेरी गतिविधि चल रही है) रखना चाहूंगा।

मैं इसे कैसे प्राप्त कर सकता हूं? मैंने BroadcastReceiver के जीवन चक्र को देखा है लेकिन दस्तावेज़ीकरण में जो भी उल्लेख किया गया है वह यह है कि लाइफसाइक्ल ऑनसेसिव विधि तक सीमित है, न कि आने वाले एसएमएस के लिए ब्रॉडकास्ट रिसीवर की जांच करने की जीवन चक्र।

मैं इसे लगातार कैसे बना सकता हूं?

धन्यवाद

उत्तर

132

आप कार्रवाई का नाम android.intent.action.BOOT_COMPLETED साथ प्रकट में एक रिसीवर परिभाषित करने की जरूरत।

<!-- Start the Service if applicable on boot --> 
<receiver android:name="com.prac.test.ServiceStarter"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED"/> 
    </intent-filter> 
</receiver> 

सुनिश्चित करें कि पूर्ण बूट अनुमति भी शामिल है।

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 

कुछ भी जारी रखने के लिए Service का उपयोग करें। और सिस्टम बूट होने पर सेवा को पुनरारंभ करने के लिए बूट अप ईवेंट प्राप्त करने के लिए रिसीवर का उपयोग करें ..

बूट अप पर सेवा शुरू करने के लिए कोड। सेवा को एसएमएस या जो कुछ भी आप चाहते हैं उसकी जांच करने का काम करें। आपको MyPersistingService में अपना काम करने की आवश्यकता है इसे स्वयं परिभाषित करें।

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.util.Log; 

public class ServiceStarter extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent i = new Intent("com.prac.test.MyPersistingService"); 
     i.setClass(context, MyPersistingService.class); 
     context.startService(i); 
    } 
} 
+10

आप यह भी सुनिश्चित करना चाहते हैं कि आपके पास काम करने के लिए आपकी ऐप मेनिफेस्ट फ़ाइल में परिभाषित 'RECEIVE_BOOT_COMPLETED' अनुमति है। –

+0

क्या यह कार्य करता है यदि अनुप्रयोग संदर्भ किसी प्रोजेक्ट लाइब्रेरी से किसी अन्य को विस्तारित कर रहा है? – Maxrunner

+0

धन्यवाद जावनेटर (रोहित), मेरी मदद (रवि-सीआईपीएल और मलेशिया) – DynamicMind

5

सेवा या बूट पूरे

वास्तव में, यदि आप एक Service लागू करने या कुछ उदाहरण android.intent.action.BOOT_COMPLETED

रजिस्टर की जरूरत नहीं है अनिवार्य नहीं है कैसे रजिस्टर करने के लिए पता चलता/एक BroadcastReceiver अपंजीकृत जब गतिविधि बनाई जाती है और नष्ट हो जाती है। हालांकि, यह उन उद्देश्यों के लिए उपयोगी है जो आप केवल तब ही उम्मीद करते हैं जब ऐप खोला जाता है (उदाहरण के लिए सेवा/गतिविधि के बीच आंतरिक संचार के लिए)।

हालांकि, एसएमएस के मामले में, आप हर समय इरादे को सुनना चाहते हैं (और न केवल जब आप ऐप खोले जाते हैं)।

एक और तरीका

आप एक class जो BroadcastReceiver फैली बना सकते हैं और AndroidManifest.xml के माध्यम से वांछित उद्देश्य के लिए रजिस्टर कर सकते हैं नहीं है। इस तरह, BroadcastReceiver अपनी गतिविधि से indepedent हो जाएगा (और गतिविधि के जीवन चक्र से निर्भर नहीं होगा)

इस तरह, आपके BroadcastReceiver रूप में जल्द ही होगा कि आपके ऐप बंद कर दिया है एक एसएमएस भी आते ही एंड्रॉयड द्वारा स्वचालित रूप से सूचित किया जाएगा।

AndroidManifest।एक्सएमएल

<?xml version="1.0" encoding="utf-8"?> 
<manifest> 
    ... 
    <uses-permission android:name="android.permission.READ_SMS"/> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"/> 

    <application> 
     .... 
     <receiver android:name=".MyCustomBroadcastReceiver"> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

MyCustomBroadcastReceiver.java

public class MyCustomBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent != null) { 
      String action = intent.getAction(); 
      if(action != null) { 
       if(action.equals("android.provider.Telephony.SMS_RECEIVED")) { 
        // DO YOUR STUFF 
       } else if (action.equals("ANOTHER ACTION")) { 
        // DO ANOTHER STUFF 
       } 
      } 
     } 
    } 
} 

नोट्स

आप AndroidManifest करने के लिए दूसरों के इरादे-फिल्टर जोड़ सकते हैं और एक ही BroadcastReceiver में उन सभी को संभाल कर सकते हैं।

केवल एक सेवा शुरू करें यदि आप एक लंबा कार्य करेंगे। आपको बस एक अधिसूचना प्रदर्शित करने या कुछ डेटाबेस अपडेट करने की आवश्यकता है, बस ऊपर दिए गए कोड का उपयोग करें।

+0

यदि ऐप बहुत बार दुर्घटनाग्रस्त हो जाता है या उपयोगकर्ता बल-ऐप को रोकता है, तो इसे प्रसारण ईवेंट पर पुनः लॉन्च नहीं किया जाएगा – basin

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