2011-12-20 19 views
7

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

public class C2dmreceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.w("C2DM", "Message Receiver called"); 
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) 
     { 
      final String payload = intent.getStringExtra("key1"); 
      Log.d("C2DM", "message = " + payload); 
     } 
    }} 

मैं गतिविधि में रिसीवर रजिस्टर करने के लिए इतना है कि रिसीवर डेटा भेज सकते हैं और चल रहा है गतिविधि कर सकते हैं की कोशिश में गतिविधि के अंदर इस तरह की कोशिश की है: रिसीवर के कोड (कोड में कोई बग) है डेटा प्राप्त: -)

C2dmreceiver c2dmr = new C2dmreceiver(); 
Registration.this.registerReceiver(c2dmr, new IntentFilter()); 

मैं क्या IntentFilter अंदर डाल करने के लिए (पता नहीं है, यह भी और क्या मैं गतिविधि के कोड और इतना है कि रिसीवर के कोड में डाल करने के लिए है, जबकि गतिविधि चल रहा है और कुछ सी 2 डीएम संदेश आता है रिसीवर चल रहे गतिविधि को डेटा भेज सकता है।

तो, कृपया मुझे उस कोड को बताएं जो गतिविधि में और रिसीवर में डालना है और यह भी प्रकट हो सकता है ताकि रिसीवर से डेटा चल रहे गतिविधि को भेजा जा सके।

किसी भी सलाह की अत्यधिक सराहना की जाती है।

उत्तर

21

सबसे पहले गतिविधि में सी 2 डीएम रिसीवर की सदस्यता लेने का सबसे अच्छा विचार नहीं है। इसे प्रकट में करो। गतिविधि को डेटा पास करने के लिए आप गतिविधि में स्थिर स्ट्रिंग फ़ील्ड बना सकते हैं और वहां स्ट्रिंग सेट कर सकते हैं।

आप कुछ इस तरह कर सकते हैं:

Activity में

public static YourActivity mThis = null; 
@Override 
protected void onResume() { 
    super.onResume(); 
    mThis = this; 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    mThis = null; 
} 

अपने BroadcastReceiver में:

@Override 
public void onReceive(Context context, Intent intent) { 
... 
if (YourActivity.mThis != null) { 
    ((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm"); 
} 
else { 
... 
} 
+0

मैं अपने गतिविधि की जरूरत रिसीवर से C2DM डेटा प्राप्त है और यह भी बारे में सूचित किया डेटा का आगमन, यह कैसे किया जा सकता है? मैं सिर्फ यह जानना चाहता हूं कि कुछ विशेष प्रसारण रिसीवर को गतिविधि कैसे पंजीकृत की जाए और रिसीवर द्वारा प्राप्त किए गए अपडेट प्राप्त करें। –

+1

आपको गतिविधि में C2DMReceiver पंजीकृत नहीं करना चाहिए - क्योंकि गतिविधि शुरू नहीं होने पर संदेश आ सकते हैं - आपको इस संदेश को कसरत करना होगा। डेटा पास करने के लिए आप स्थिर फ़ील्ड या सिंगलटन का उपयोग कर सकते हैं। – Jin35

+0

कृपया आप एक उदाहरण कार्यान्वयन दे सकते हैं। –

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