2010-08-30 13 views
12

मैं एंड्रॉइड के लिए नया हूं। मुझे Intent और BroadcastReceiver के बीच का अंतर क्या पता है। मैं BroadcastReceiverIntent से अधिक उलझन में हूं।एंड्रॉइड-ब्रॉडकास्ट रिसीवर

कृपया मेरी मदद करें। सरल कोड सहायक होगा।

+0

** कृपया यह लिंक देखें ** https://stackoverflow.com/questions/15698790/broadcast-receiver-for-checking-internet-connection-in-android-app/44881551#44881551 –

उत्तर

30

ठीक है, मैं इसे एक उदाहरण के साथ समझाऊंगा।

मान लीजिए कि मैं अपने वेबपृष्ठ से सबवे स्थिति की जांच करने के लिए एक ऐप बनाना चाहता हूं। अगर मेट्रो ठीक काम नहीं कर रहा है तो मैं सिस्टम अधिसूचना भी चाहता हूं।

मैं होगा:

  • एक Activity परिणाम दिखाने के लिए।
  • Service यह जांचने के लिए कि क्या सबवे काम कर रहा है और अगर यह काम नहीं कर रहा है तो अधिसूचना दिखाएं।
  • Broadcast Receiver प्रत्येक 15 मिनट में सेवा कॉल करने के लिए Alarm Receiver कहा जाता है।

मैं आपको कुछ कोड दिखाने दें:

/* AlarmReceiver.java */ 
public class AlarmReceiver extends BroadcastReceiver { 
    public static final String ACTION_REFRESH_SUBWAY_ALARM = 
      "com.x.ACTION_REFRESH_SUBWAY_ALARM"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startIntent = new Intent(context, StatusService.class); 
     context.startService(startIntent); 
    } 
} 

स्पष्टीकरण: आप देख सकते हैं के रूप में आप एक अलार्म सेट कर सकते हैं। और जब अलार्म प्राप्त होता है तो हम service शुरू करने के लिए intent का उपयोग करते हैं। असल में intent एक संदेश है जिसमें क्रियाएं हो सकती हैं, एक धारावाहिक सामग्री।

public class StatusService extends Service { 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     mAlarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     Intent intentToFire = new Intent(AlarmReceiver.ACTION_REFRESH_ALARM); 
     mAlarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); 
    } 

    @Override 
    public void onStart(Intent intent, int arg1) { 
     super.onStart(intent, arg1); 
     Log.d(TAG, "SERVICE STARTED"); 
     setAlarm(); 
     Log.d(TAG, "Performing update!"); 
     new SubwayAsyncTask().execute(); 
     stopSelf(); 
    } 

    private void setAlarm() { 
     int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
     mAlarms.setInexactRepeating(alarmType, SystemClock.elapsedRealtime() + timeToRefresh(), 
        AlarmManager.INTERVAL_HALF_DAY, mAlarmIntent); 
    } 

} 

स्पष्टीकरण:

service शुरू होता है और:

  • अगली कॉल के लिए अलार्म सेट। (। आशय यह प्रयोग किया जाता है बस एक संदेश की जाँच करें)
  • एक AsyncTask जो अद्यतन करने का ख्याल रखता है कॉल एक को अधिसूचित Activity

यह मतलब नहीं है AsyncTask पेस्ट करने के लिए लेकिन जब यह समाप्त हो गया यह कहता है:

private void sendSubwayUpdates(LinkedList<Subway> subways) { 
     Intent intent = new Intent(NEW_SUBWAYS_STATUS); 
     intent.putExtra("subways", subways); 

     sendBroadcast(intent); 
} 

यह एक निश्चित NEW_SUBWAYS_STATUS कार्रवाई के साथ एक नया Intent, आशय के अंदर डाल सबवे और sendBroadcast पैदा करता है। अगर कोई उस जानकारी को प्राप्त करने में रूचि रखता है, तो उसे रिसीवर होगा।

मुझे उम्मीद है कि मैंने खुद को स्पष्ट कर दिया है।

पीएस: कुछ दिन पहले किसी ने बहुत ही अच्छे तरीके से प्रसारण और इरादों को समझाया। कोई अपनी बीयर साझा करना चाहता है, इसलिए वह एक कार्यवाही के साथ प्रसारण भेजता है: "FREE_BEER" और अतिरिक्त के साथ: "एक ग्लास बियर"।

+0

क्या आप सुनिश्चित हैं कि हम सबवे अलार्म के साथ इसका परीक्षण कर सकते हैं? – Sayka

3

एपीआई कहता है:

एक BroadcastReceiver कोड कि sendBroadcast() द्वारा भेजे गए उद्देश्यों को प्राप्त होगा के लिए एक आधार वर्ग है।

एक इरादा एक ऑपरेशन का एक सार वर्णन है।

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

+0

मुझे लगता है कि ब्रॉडकास्ट रिसीवर वास्तव में सेवाओं के हिस्से के रूप में उलझन में आते हैं। हालांकि, मैंने उन्हें सामान्य इंटर-गतिविधि संदेशों के लिए कुछ बार उपयोग किया है, जैसे बैक स्टैक में से किसी एक को भेजना। इसका उपयोग करने के लिए बिल्कुल कोई ज़रूरत नहीं है। "अरे, उपयोगकर्ता परिवर्तन रहा है। इसका जवाब दें!" –

+1

एक ब्रॉडकास्ट रिसीवर एक गतिविधि नहीं है! – Shatazone

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