2015-03-20 3 views
6

मेरे पास एक गतिविधि वर्ग है जिसे डिवाइस की वर्तमान बाधा फ़िल्टर सेटिंग प्राप्त करने की आवश्यकता है।कोई गतिविधि NotificationListenerService की विधि तक कैसे पहुंच सकती है?

इसलिए मेरे पास MyNotificationListenerService कक्षा है जो अधिसूचना लिस्टनर सेवा से प्राप्त होती है और अंतर्निहितफिल्टर चेंज() पर लागू होती है।

हालांकि onInterruptionFilterChanged() केवल तब भी कॉल हो जाता है जब बाधा फ़िल्टर बदलता है। जब मेरा ऐप लॉन्च होता है तो मुझे यह पता लगाने की आवश्यकता होती है कि बाधा फ़िल्टर का वर्तमान मूल्य क्या है। अधिसूचना लिस्टनर सेवा के लिए एक विधि है जो getCurrentInterruptionFilter() है।

मेरा प्रश्न है: कैसे कर सकते हैं जब मेरे एप्लिकेशन लॉन्च होने MyActivity कॉल MyNotificationListenerService के getCurrentInterruptionFilter()?

ओएस स्वचालित रूप से बनाता है और MyNotificationListenerService शुरू होता है, वहाँ किसी न किसी प्रकार MyActivity आदेश getCurrentInterruptionFilter() स्पष्ट रूप से कॉल करने के लिए में है कि वस्तु के लिए एक संभाल प्राप्त कर सकते है? यदि नहीं, तो से प्रारंभिक बाधा सेटिंग प्राप्त करने में सक्षम होने के लिए MyActivity के लिए क्या संचार तंत्र होना चाहिए?

+1

कैसे 'MyNotificationListenerService' वर्ग के लिए और तरीकों तक पहुँचने से एक वस्तु बनाने के बारे में? –

+1

@Prerak। यही वही है जो मेरा सवाल है। MyActivity MyNotificationListenerService के तरीकों तक कैसे पहुंच सकता है? जैसा कि मैंने 5 वें अनुच्छेद में कहा था - ओएस एक MyNotificationListenerService ऑब्जेक्ट बनाता है, इसलिए MyActivity उस ऑब्जेक्ट को कैसे पकड़ सकता है, मेरा प्रश्न यह है कि मेरा प्रश्न क्या है। – Gruntcakes

उत्तर

0

आप अपनी गतिविधि से सेवा से जुड़ना चाहते हैं। एंड्रॉइड डॉक्स में http://developer.android.com/guide/components/bound-services.html

पर इसका एक विस्तृत स्पष्टीकरण है, यह एक उदाहरण है कि यह कैसे काम करेगा।

आपका गतिविधि:

public class MyActivity extends Activity { 

    private MyNotificationListenerService mService; 
    private MyServiceConnection mServiceConnection; 

    ... 

    protected void onStart() { 
     super.onStart(); 
     Intent serviceIntent = new Intent(this, MyNotificationListenerService.class); 
     mServiceConnection = new MyServiceConnection(); 
     bindService(serviceIntent, mServiceConnection, BIND_AUTO_CREATE); 
    } 

    protected void onStop() { 
     super.onStop(); 
     unbindService(mServiceConnection); 
    } 

    private class MyServiceConnection implements ServiceConnection { 

     @Override 
     public void onServiceConnected(ComponentName name, IBinder binder) { 
      mService = ((MyNotificationListenerService.NotificationBinder)binder).getService(); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName name) { 
      mService = null; 
     } 
    } 
} 

आपका सेवा:

public class MyNotificationListenerService extends NotificationListenerService { 

    ... 

    private NotificationBinder mBinder = new NotificationBinder(); 

    @Override 
    public IBinder onBind(Intent intent) { 
     return mBinder; 
    } 

    public class NotificationBinder extends Binder { 
     public MyNotificationListenerService getService() { 
      return MyNotificationListenerService.this; 
     } 
    } 
} 
+0

जब गतिविधि बनाई जा रही है तो मुझे अपवाद मिलता है, एक लॉग संदेश है कि कनेक्शन शून्य है। मैंने कहीं पढ़ा है (अब लिंक नहीं मिल रहा है) कि अधिसूचना लिस्टनर सेवा "विशेष" है जिसमें केवल ओएस इसे बांध सकता है। – Gruntcakes

+0

मैंने जवाब अपडेट कर लिया है, मैंने 'mServiceConnection = new MyServiceConnection() छोड़ा;' जो शून्य कनेक्शन के लिए ज़िम्मेदार था। इसका परीक्षण किया, और मैं आपके उत्तर के लिए सेवा –

+1

सेवा सफलतापूर्वक बाध्य करने में सक्षम था। हालांकि मैं खोजने रहा है कि यह कोड जोड़ने प्रतीत होता है वास्तव में काम करने से NotificationListenerService बंद हो जाता है। उपरोक्त कोड जब एप्लिकेशन NLS चलाता है जैसे ही वे ऐसा एप्लिकेशन को उपयोगकर्ता अनुदान नोटिफिकेशन ऐक्सेस जब तक कुछ भी नहीं है, बिना तो NLS के onListenerConnected() कहा जाता हो जाता है और() onInterruptionFilterChanged में रुकावट फिल्टर परिणाम के लिए एक बदलाव हो रही है कहा जाता है आदि लेकिन अगर इसके बाद के संस्करण कोड जोड़ दिया जाता है, तो जब उपयोगकर्ता अनुदान नोटिफिकेशन ऐक्सेस तो onInterruptionFilterChanged() तो या कभी कहा जाता है प्राप्त करता है। – Gruntcakes

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