2010-10-01 12 views
21

मुझे क्लासिक कार्य लगता है, फिर भी मुझे यह करने के तरीके पर कोई उदाहरण नहीं मिल रहा है।एक सेवा वापसी के परिणामस्वरूप गतिविधि

मैं कुछ डाउनलोड करना चाहता हूं। खैर मैं एक वेब सेवा कहता हूं और प्रतिक्रिया प्राप्त करता हूं ... लेकिन यह काफी समान है।

ऐसा करने के लिए मेरे पास एक ऐसी गतिविधि है जो एक ऐसी सेवा शुरू करती है जो नौकरी करता है।

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

(मुझे लगता है कि एक और गतिविधि शुरू करने परिणाम आसान होगा प्रदर्शित करने में काम संभालने के लिए)

मेरे समस्या यह है कि कैसे सेवा एक गतिविधि (एक या एक और एक है कि यह शुरू कर दिया) कुछ के बारे में सूचित करता है?

उदाहरणों के लिए कोई संकेतक बहुत सराहना करते हैं।

सादर

+0

आप इस सरल स्थानीय प्रसारण उदाहरण यहाँ जाँच इस के लिए स्थानीय प्रसारण रिसीवर का उपयोग कर सकते http://wiki.workassis.com/एंड्रॉइड-स्थानीय-प्रसारण-रिसीवर/ –

उत्तर

36

गूगल प्रलेखन के अनुसार, आपके गतिविधि और सेवा एक ही अनुप्रयोग के भीतर रहे हैं, का उपयोग कर एक LocalBroadcastManager sendBroadcast (आशय) से अधिक पसंद किया जाता है क्योंकि जानकारी भेजी: https://github.com/commonsguy/cw-android/tree/master/Service/WeatherAPI डॉक्टर:

यहाँ इस बात का एक उदाहरण है प्रणाली के माध्यम से नहीं जाता है जो अवरोध के जोखिम को समाप्त करता है। http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html

इसका उपयोग करना काफी आसान है।

अपने गतिविधि में, एक BroadcastReceiver बना सकते हैं और गतिशील रूप से विधि onResume() में एक श्रोता जोड़ें:

private BroadcastReceiver BReceiver = new BroadcastReceiver(){ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     //put here whaterver you want your activity to do with the intent received 
    }   
}; 

protected void onResume(){ 
super.onResume(); 
LocalBroadcastManager.getInstance(this).registerReceiver(bReceiver, new IntentFilter("message")); 
} 

protected void onPause(){ 
super.onPause(); 
LocalBroadcastManager.getInstance(this).unregisterReceiver(bReceiver); 
} 

और आपकी सेवा में, आप LocalBroadcastManager का एक उदाहरण हो और कोई लक्ष्य भेजने के लिए इसका इस्तेमाल करते हैं। मैं आमतौर पर इस तरह अपनी ही विधि में रख:

private void sendBroadcast (boolean success){ 
    Intent intent = new Intent ("message"); //put the same message as in the filter you used in the activity when registering the receiver 
    intent.putExtra("success", success); 
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
} 
+0

कार्य-सक्षम कोड –

+0

के संदर्भ में स्वीकृत उत्तर से यह अधिक उपयोगी है यह स्वीकार्य उत्तर होना चाहिए। –

4

आप इस तरह के उपयोगकर्ता परिभाषित वर्ग के रूप में डेटा के विभिन्न प्रकार, लौटने की जरूरत है, तो आप bindService और कॉलबैक कोशिश कर सकते हैं। यह sendBroadcast से पार्ससेल इंटरफेस को लागू करने से बच सकता है।

कृपया मेरी पोस्ट में उदाहरण देखें:

https://stackoverflow.com/a/22549709/2782538

और अधिक, अगर आप IntentService उपयोग करते हैं, आप ResultReceiver पर गौर कर सकता है। विवरण और नमूना इस पोस्ट में पाया जा सकता है:

Android: restful API service

आशा है कि यह मदद करता है।

+0

'bindService() 'अवधारणा के लिए शानदार उदाहरण, अवधारणा को सही ढंग से कार्यान्वित करना। – Eido95

0

आप विचाराधीन आशय, घटना बस, मैसेंजर या प्रसारण उद्देश्य वापस गतिविधि/टुकड़ा करने के लिए सेवा से डेटा प्राप्त करने और फिर डेटा पर कुछ कार्रवाई करने का उपयोग कर सकते हैं।

लिंक नीचे मेरी ब्लॉग पोस्ट चेक आउट के समय जो शामिल किया गया है इन सभी approaches-

https://androidlearnersite.wordpress.com/2018/02/23/communicating-from-services/

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