2014-04-11 8 views
6

के साथ संवाद करें पहला सवाल यहां है, लेकिन मैं थोड़ी देर के लिए रहा हूं।अग्रभूमि सेवा एंड्रॉइड

मैं पास क्या है:

मैं जो ऑडियो धाराओं और ऑनलाइन प्लेलिस्ट निभाता है एक Android ऐप्लिकेशन का निर्माण कर रहा हूँ। सब कुछ ठीक काम कर रहा है, लेकिन मुझे अपनी सेवा के साथ संवाद करने में समस्याएं आ रही हैं।

संगीत एक सेवा में खेल रहा है, शुरुआत के साथ शुरू हुआ, इसलिए यह नहीं मारा जाता है।

मुझे ट्रैक नाम, छवि और कुछ और चीजों को प्राप्त करने के लिए, सेवा के साथ मेरी गतिविधि से संवाद करने की आवश्यकता है।

क्या मेरी समस्या:

मुझे लगता है कि मैं (मेरे वर्तमान startService के बजाय) bindService के साथ मेरी सेवा शुरू करने के लिए इतना गतिविधि इसे करने के लिए बात कर सकते हैं की जरूरत है।

हालांकि, जब मैं ऐसा करता हूं, तो गतिविधि बंद करने के बाद मेरी सेवा मारे जाती है।

मैं दोनों कैसे प्राप्त कर सकता हूं? बाध्यकारी और अग्रभूमि सेवा?

धन्यवाद!

+0

क्या आपने अपनी सेवा के लिए अधिसूचना करने का प्रयास किया है? मुझे लगता है कि इसे मारने से रोकने में मदद करनी चाहिए। – indivisible

+0

क्या मेरे उत्तर में मदद मिली? – Libin

उत्तर

6

सं। bindService सेवा शुरू नहीं करेगा। यह Service पर service connection के साथ बस बाध्य होगा, ताकि आपके पास पहुंच/नियंत्रण करने के लिए सेवा के instance हों।

आपकी आवश्यकता के अनुसार मुझे आशा है कि आपके पास सेवा में MediaPlayer का उदाहरण होगा। आप Activity से सेवा शुरू कर सकते हैं और फिर bind इसे सेवा भी शुरू कर सकते हैं। यदि service पहले से चल रहा है onStartCommand() कहा जाएगा, और आप जांच सकते हैं कि MediaPlayer उदाहरण शून्य नहीं है तो बस START_STICKY वापस करें।

बदलें आप Activity इस तरह ..

public class MainActivity extends ActionBarActivity { 

    CustomService customService = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // start the service, even if already running no problem. 
     startService(new Intent(this, CustomService.class)); 
     // bind to the service. 
     bindService(new Intent(this, 
      CustomService.class), mConnection, Context.BIND_AUTO_CREATE); 
    } 

    private ServiceConnection mConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
      customService = ((CustomService.LocalBinder) iBinder).getInstance(); 
      // now you have the instance of service. 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName componentName) { 
      customService = null; 
     } 
    }; 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     if (customService != null) { 
      // Detach the service connection. 
      unbindService(mConnection); 
     } 
    } 
} 

मैं MediaPlayerservice के साथ इसी तरह आवेदन कर सकते है। अगर यह दृष्टिकोण आपकी मदद नहीं करता है तो मुझे बताएं।

+0

मेरी स्थिति में अगर मैं अपनी सेवा पर असहमत हूं। सेवा मारे गए क्योंकि एकमात्र गतिविधि जो इसके लिए बाध्य है उसे बंद कर दिया गया है/दृश्य बंद कर दिया गया है। यह अत्यधिक दस्तावेज है। मैं अपने ऐप के लिए एक डाउनलोडर सिस्टम कर रहा हूं। लेकिन यह सेवा को मारता है। जब डाउनलोडर किया जाता है, तो मैंने खुद को सेवा के भीतर कहीं भी बुलाया है, इसलिए मेरी सेवा हमेशा के लिए नहीं चल रही है। कोई विचार? –

2

का हवाला देते हुए Android documentation:

एक बाध्य सेवा नष्ट हो जाता है एक बार सभी ग्राहकों के निकल, जब तक सेवा भी शुरू किया गया था

और बीच अंतर के बारे और बाध्य शुरू कर दिया सिर्फ एक लेने https://developer.android.com/guide/components/services.html

देखें, तो आपकोका उपयोग करके सेवा बनाना हैऔर फिर bindService, जैसे @ लिबिन अपने उदाहरण में करता है। फिर, सेवा तब तक चली जाएगी जब तक आप stopService या stopSelf या जब तक एंड्रॉइड निर्णय लेता है कि उसे संसाधनों की आवश्यकता है और आपको मार देता है।

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