2011-05-10 13 views
7

पर आधारित फ़िल्टर इरादा मैं कस्टम-डेटा के साथ इरादा प्रसारित करना चाहता हूं और केवल वह रिसीवर जिसके पास इस कस्टम डेटा को यह मंशा प्राप्त होना चाहिए, यह कैसे किया जा सकता है?कस्टम डेटा

यह कैसे मैं आशय प्रसारण:

Intent intent = new Intent(); 
intent.setAction("com.example"); 
context.sendBroadcast(intent); 

और मैं निम्नलिखित के रूप में प्रसारण रिसीवर को परिभाषित:

<receiver android:name="com.test.myReceiver" android:enabled="true"> 
     <intent-filter> 
      <action android:name="com.example"></action> 
     </intent-filter> 
    </receiver> 

उत्तर

0

आप पहले से ही अपने प्रसारण रिसीवर वर्ग को परिभाषित करते हैं, तो अगले कदम के रजिस्टर करने के लिए है यह उस गतिविधि/सेवा पर है जिसे आप प्रसारण उद्देश्य प्राप्त करना चाहते हैं। एक उदाहरण रजिस्टर करने के लिए:

IntentFilter iFilter = new IntentFilter(); 
    iFilter.addAction("com.example"); //add your custom intent to register 
    //below is your class which extends BroadcastReceiver, contains action 
    //which will be triggered when current class received the broadcast intent 
    MyReceiver myReceiver = new MyReceiver(); 
    registerReceiver(myReceiver, iFilter); //register intent & receiver 

आप गतिविधि/सेवा को नष्ट, अभ्यास के लिए सबसे अच्छा के लिए एक ही गतिविधि/सेवा पर प्रसारण रिसीवर का पंजीकरण रद्द करना मत भूलना:

@Override 
protected void onDestroy() { 
    if(myReceiver!=null) 
     unregisterReceiver(myReceiver) 
    super.onDestroy(); 
} 

MyReceiver वर्ग:

public class MyReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     if(intent.getAction().equals("com.example")){ 
      //DO SOMETHING HERE 
     } 
    } 
} 
+1

मैनिफेस्ट में परिभाषित एक रिसीवर को इस तरह से पंजीकृत होने की आवश्यकता नहीं है। यह ब्रॉडकास्ट प्राप्त करेगा और इसे सक्रिय रूप से मैनिफेस्ट प्रविष्टि के आधार पर रीसीव() विधि पर आग लगाएगा। – Maximus

+0

आह, मैं देखता हूं, यह समझ में आता है .. सुधार maximus –

2

अपनी myReceiver क्लास को मूल रूप से कैसे सेट किया गया है, यह सेट अप करें।

public class myReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     //Do something 
    } 
} 

आप क्योंकि आप पहले से क्या आप अपने मेनिफ़ेस्ट में शामिल किया है, कम से कम इस सरल मामले में के आधार पर इसके लिए फ़िल्टर कर दिया आशय कार्रवाई की जांच करने के लिए नहीं करना चाहिए। आपके पास अन्य कार्रवाइयां और फ़िल्टर हो सकते हैं, इस मामले में आपको प्राप्त इरादे पर किसी प्रकार की जांच की आवश्यकता होगी।

यदि आप फ़िल्टर पर डेटा फ़िल्टर करना चाहते हैं, तो इरादे फ़िल्टर पर एसडीके दस्तावेज उसमें शामिल है। मैं डेटा प्रकारों के साथ बहुत अच्छा नहीं हूं इसलिए मैं जो भी उदाहरण दूंगा वह अपेक्षाकृत खराब होगा। किसी भी घटना में, यहां प्रकट इरादे फ़िल्टर पृष्ठ का एक लिंक है: http://developer.android.com/guide/topics/manifest/intent-filter-element.html

और डेटा तत्व के लिए विशिष्ट पृष्ठ; http://developer.android.com/guide/topics/manifest/data-element.html

+0

के लिए धन्यवाद मैं एक कस्टम डेटा का उपयोग कर फ़िल्टर करना चाहता था कस्टम कार्रवाई नहीं। – Jimmy

+0

ठीक है, अगर आप डेटा पर फ़िल्टर करना चाहते हैं तो मैंने कुछ दस्तावेज़ लिंक जोड़ने के लिए पोस्ट संपादित किया है। – Maximus

+0

मैंने क्विस्टन से पहले एंड्रॉइड के लिए प्रलेखन देखा, यह बात डेटा नोड में है, उनके पास पथ, योजना और पथफ्रिक्स है। मैं कस्टम डेटा के लिए किस का उपयोग करता हूं? क्या आप एक उदाहरण प्रदान कर सकते हैं। – Jimmy

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