2011-12-22 18 views
20

मुझे गलत समझा जा सकता है कि इरादों का उपयोग कैसे किया जाना चाहिए, इसलिए मैं यहां गलत चीज़ पूछ रहा हूं। यदि ऐसा है, तो कृपया मुझे इसके साथ सही रास्ते पर जाने में मदद करें ...मैं एंड्रॉइड इरादा कैसे बना सकता हूं जिसमें डेटा है?

मैंने अभी एक एंड्रॉइड ऐप पर काम करना शुरू कर दिया है जो मेरे सर्वर को हर बार संदेशों के लिए मतदान करेगा, और जब कोई नया संदेश होगा उपलब्ध है, मैं इसे उपयोगकर्ता को दिखाना चाहता हूं। मैं इसे Service पर लागू करने की कोशिश कर रहा हूं जो सर्वर को चुनाव करता है, और जब कोई नया संदेश प्राप्त होता है तो सेवा को Activity पर संदेश देना चाहिए जो इसे दिखाता है।

इस संचार को सुविधाजनक बनाने के लिए, मैं ACTION_VIEW के साथ बनाने की कोशिश कर रहा हूं, लेकिन मैं यह समझ नहीं सकता कि गतिविधि को संदेश कैसे देना है। क्या इरादे के माध्यम से स्ट्रिंग या नियमित जावा ऑब्जेक्ट को पास करने का कोई तरीका नहीं है?

क्या इसके लायक है के लिए, यह मैं क्या करना चाहते हैं क्या है:

getApplication().startActivity(new Intent(MessageService.this, ViewMessageActivity.class, message)); 

लेकिन निश्चित रूप से, यह है कि संकलन नहीं है।

+0

क्या आप एक कुंजी/मूल्य जोड़ी पास करने के लिए अधिभारित putExtra() के लिए lokking हैं। बाद में आप इस डेटा को getExtras() के माध्यम से उस उद्देश्य ऑब्जेक्ट – AxelTheGerman

+0

पर मतदान के बजाय एक्सेस कर सकते हैं ... यदि आप कर सकते हैं, तो आप पुश संदेशों को करने का प्रयास करना चाहेंगे, मतदान किसी फोन पर कभी भी अच्छा विचार नहीं है। लेकिन कभी-कभी हमारे पास कोई अन्य विकल्प नहीं होता है। – JoxTraex

उत्तर

53

अतिरिक्त जानकारी जोड़ने के लिए है, तो जैसे आशय बंडल का उपयोग करें:

Intent i = new Intent(MessageService.this, ViewMessageActivity.class); 
i.putExtra("name", "value"); 

और प्राप्त करने की ओर:

String extra = i.getStringExtra("name"); 

का या, स्वतंत्र रूप से एक बंडल के रूप में सभी अतिरिक्त प्राप्त करने के लिए, टाइप:

Bundle b = i.getExtras(); 

putExtra() विधि और विभिन्न विधि के लिए विभिन्न हस्ताक्षर हैं अपने प्रकार के आधार पर डेटा प्राप्त करने के लिए। आप यहां और देख सकते हैं: Intent, putExtra

संपादित करें: एक वस्तु पर पास करने के लिए यह Parcelable या Serializable को लागू करना चाहिए, ताकि आप निम्नलिखित हस्ताक्षर से एक का उपयोग कर सकते हैं:

putExtra(String name, Serializable value)

putExtra(String name, Parcelable value)

+1

आमतौर पर गतिविधि को डेटा पास करने का यह सबसे अच्छा तरीका है। यह वास्तव में उपयोगी है विशेष रूप से putExtra() एक कस्टम Serializable वस्तु ले सकते हैं। – Krylez

17

आप को निम्न कर सकते हैं इरादे बंडल में जानकारी जोड़ें:

Intent i = new Intent(MessageService.this, ViewMessageActivity.class); 
    i.putExtra("message", "value"); 
    startActivity(i); 

फिर गतिविधि में आप इस तरह प्राप्त कर सकते हैं:

Bundle extras = getIntent().getExtras(); 
    String message = extras.getString("message"); 
1

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

आप एक ब्रॉडकास्ट रिसीवर के साथ sendBroadcast (इरादा) का उपयोग कर सकते हैं ताकि एक नया संदेश प्राप्त हो सके।

+1

शायद यह है कि मैं क्या करूँगा, लेकिन इस पल में मुझे यह पूछने की ज़रूरत नहीं थी, इसलिए मैंने थोड़ा सा सरल बनाने का फैसला किया =) –

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

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