मैं documentation about Bound Services, जहां यह दिखाया गया है कि आप आसानी से एक दूरस्थ करने के लिए एक गतिविधि से संदेश के माध्यम से संवाद कर सकते हैं (यानी एक ही संदर्भ में नहीं) सेवा लेकिन वहाँ किसी भी तरह से सेवा से संदेश भेजने के लिए है पढ़ा है बाध्य गतिविधि पर? उदाहरण के लिए, मेरी गतिविधि एक ही एप्लिकेशन की चल रही पृष्ठभूमि सेवा से जुड़ी है, इसे एक संदेश भेजती है और इस संदेश के स्वागत पर सेवा गतिविधि के संदेश के साथ जवाब देती है .. मैं इसे कैसे कार्यान्वित कर सकता हूं? क्या आप मुझे कुछ दस्तावेज बता सकते हैं जो इस विषय को बताते हैं?रिमोट सेवा एक बाध्य गतिविधि को संदेश कैसे भेज सकती है?
उत्तर
संदर्भ प्रलेखन में Remote Messenger Service Sample पर उदाहरण मिला।
नोट: यह केवल इन-प्रोसेस सेवाओं और गतिविधियों के लिए है, सवाल पूछे जाने वाले रिमोट नहीं।
किसी गतिविधि के साथ संवाद करने के लिए एक सेवा का उपयोग करने से श्रोता बनाने में शामिल होता है जिसे आप गतिविधि से सेवा में भेज सकते हैं।
आपको एक ऐसी गतिविधि बनाने की आवश्यकता है जो किसी गतिविधि से जुड़ी हो।
पहला कदम सेवा बना रहा है। सेवा में सुनिश्चित करें कि आपके पास बाइंडर ऑब्जेक्ट है और बाइंडर ऑब्जेक्ट को वापस करने की विधि है। नीचे एक उदाहरण है जिसे मैंने अपनी बाध्यकारी को पुनः प्राप्त करने के लिए अपनी सेवा में उपयोग किया था। यह भी ध्यान दें कि इस बाइंडर में श्रोता सेट करने का एक तरीका है, जिसे सेवा में BoundServiceListener प्रकार फ़ील्ड के रूप में सहेजा जाएगा।
/**
* Class used for the client Binder. Because we know this service always
* runs in the same process as its clients, we don't need to deal with IPC.
*/
public class DownloadBgBinder extends Binder {
public DownloadBgService getService() {
// Return this instance of LocalService so clients can call public methods
return DownloadBgService.this;
}
public void setListener(BoundServiceListener listener) {
mListener = listener;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
अब आप है कि आप बांधने की मशीन उद्देश्य यह है कि आपकी सेवा अपडेट भेजने के लिए उपयोग कर सकते हैं करने के लिए पारित कर सकते हैं इंटरफेस किसी तरह का बनाने के लिए की जरूरत है। नीचे मेरा बाउंड सेवा सेवा है।
public interface BoundServiceListener {
public void sendProgress(double progress);
public void finishedDownloading();
}
अब आपकी गतिविधि में आपको सेवा सेवा कनेक्शन बनाने की आवश्यकता है जिसका उपयोग किसी सेवा के लिए बाध्यकारी करने के लिए किया जाता है। तो कुछ इस तरह जोड़ें।
/** Defines callbacks for service binding, passed to bindService() */
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
mBound = false;
}
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// We've bound to LocalService, cast the IBinder and get LocalService instance
DownloadBgBinder binder = (DownloadBgBinder) service;
mService = binder.getService();
binder.setListener(new BoundServiceListener() {
@Override
public void sendProgress(double progress) {
// Use this method to update our download progress
}
@Override
public void finishedDownloading() {
}
});
mBound = true;
}
अब यहाँ सूचना के लिए कुंजी लाइन
binder.setListener(new BoundServiceListener() {
@Override
public void sendProgress(double progress) {
// Use this method to update our download progress
}
@Override
public void finishedDownloading() {
}
});
है यह हिस्सा है जहां मैं वास्तव में सेवा वर्ग के लिए मेरी BoundServiceListener इंटरफ़ेस भेज रहा हूँ। सेवा वर्ग तो है कि श्रोता वस्तु यहां
if (mListener!=null)
mListener.finishedDownloading();
if (mListener!=null)
mListener.sendProgress(percent);
का उपयोग करता है अब आप रख सकते हैं इस कहीं भी आप अपनी सेवा वर्ग में करने की जरूरत है, और अपनी गतिविधि अपनी प्रगति अपडेट प्राप्त होगा।
यह भी सुनिश्चित करें कि वास्तव में बाध्य करने और सेवा शुरू करने के लिए आपकी गतिविधि में निम्नलिखित शामिल करना शामिल है।
Intent intent = new Intent(this, DownloadBgService.class);
startService(intent);
bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
ध्यान रखें कि भले ही आप किसी सेवा से बंधे हों, यह वास्तव में तब तक शुरू नहीं हुआ जब तक आप प्रारंभ सेवा कॉल नहीं करते। सेवा के लिए बाध्यकारी सिर्फ सेवा को एक गतिविधि से जोड़ता है।startService() विधि सेवाओं
onStartCommand(Intent intent, int flags, int startId)
कॉल इसके अलावा में अपनी सेवा की घोषणा अपने प्रकट
<service android:name=".services.DownloadBgService" />
इसके अलावा सेवा निकल जब गतिविधि के द्वारा
@Override
protected void onStop() {
super.onStop();
// Unbind from the service
if (mBound) {
unbindService(mConnection);
mBound = false;
}
}
आशा इस मदद करता है छोड़ देता है।
महान उदाहरण, अवधारणा को समझाने के लिए इतना समय बिताए जाने के लिए धन्यवाद। –
@Danuofr यह प्रक्रिया में काम करता है। क्या प्रक्रिया सीमाओं में मनमाने ढंग से श्रोता भेजने का कोई तरीका है? – dcow
इस उत्तर के साथ केवल समस्या यह है: यह केवल स्थानीय सेवा के लिए है। लेकिन इस सवाल से स्पष्ट रूप से पूछा जाता है कि रिमोट सेवा के साथ इसे कैसे किया जाए। लेकिन इसे लिखने के लिए वैसे भी धन्यवाद। लेकिन शायद ध्यान दें कि यह वास्तविक प्रश्न का उत्तर नहीं है :) –
- 1. स्थानीय सेवा या रिमोट सेवा?
- 2. एक सेवा में दो एंड्रॉइड क्रियाएँ कैसे बाध्य करें?
- 3. गतिविधि से संदेश भेजने के लिए गतिविधि
- 4. Android सेवा उस गतिविधि के यूआई को कैसे अपडेट कर सकती है जिसने इसे शुरू किया?
- 5. सेवा स्पर्श स्पर्श/घटनाओं के लिए कैसे सुन सकती है?
- 6. कोई सेवा किसी अन्य सेवा को बांध सकती है
- 7. क्या रैचेट वेबस्केट सर्वर क्लाइंट को संदेश भेज सकता है?
- 8. विंडोज सेवा एक जीयूआई एप्लिकेशन कैसे निष्पादित कर सकती है?
- 9. गतिविधि चल रही है, तो सेवा से अधिसूचनाओं को दबाएं
- 10. एक एंड्रॉइड सेवा को अनबाइंड
- 11. सेवा से गतिविधि तक प्रसारण भेजते हैं?
- 12. एक गतिविधि से एंड्रॉइड सेवा कैसे शुरू करें और दूसरी गतिविधि में सेवा बंद करें?
- 13. एंड्रॉइड सेवा कैसे जान सकती है कि यह किसी भी क्रियाकलाप से बंधी नहीं है
- 14. सेवा से गतिविधि
- 15. किसी गतिविधि से एक इरादा सेवा को रोकना
- 16. एंड्रॉइड - सेवा और गतिविधि इंटरैक्शन
- 17. सेवा से गतिविधि एंड्रॉइड
- 18. एक एमुलेटर स्वयं को एक एसएमएस भेज सकता है
- 19. विश्वसनीय पुश संदेश सेवा कैसे प्राप्त करें?
- 20. एक सेवा वापसी के परिणामस्वरूप गतिविधि
- 21. सी/सी ++ रिमोट संदेश कतार
- 22. जावा में, सरणी टाइप वैरिएबल की बाध्य क्यों नहीं हो सकती है, लेकिन वाइल्डकार्ड की बाध्य हो सकती है?
- 23. सेवा से एक गतिविधि रिफ्रेशिंग सक्रिय
- 24. सेवा से डेटा को गतिविधि में भेजना
- 25. सिग्नलर (हब) सिग्नल निर्माता को छोड़कर एक संदेश भेज सकता है?
- 26. एंड्रॉइड बहुत सारे एसएमएस संदेश भेज रहा है
- 27. मैं वेबसाकेट पर बड़े संदेश कैसे भेज सकता हूं?
- 28. हैंडल अक्का अभिनेता बाध्य मेलबॉक्स संदेश QueueAppendFailedException
- 29. किसी सेवा से गतिविधि कैसे शुरू करें?
- 30. एक टेस्ट में स्टडआउट को जानकारी कैसे भेज सकता है?
क्या कोई असली दुनिया की स्थिति है जहां हमें दूरस्थ सेवा बाध्यकारी की आवश्यकता होगी? –