2013-11-02 11 views
5

मैं एक ऐप पर काम कर रहा हूं जो फोन की स्टेटस बार में सभी सूचनाएं प्रदर्शित करता है (जैसे एक नया संदेश या मिस्ड कॉल)। शोध करके मैंने पाया कि एंड्रॉइड में ऐसा करने का एकमात्र तरीका एक अभिगम्यता सेवा बनाना है। इसलिए मैंने अपनी पहुंच सेवा में AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED प्राप्त करके ऐसा किया।
यहाँ मेरी onServiceConnected() विधि है:एंड्रॉइड में एक एक्सेसिबिलिटी सेवा के लिए विभिन्न फीडबैक प्रकारों का अर्थ?

public void onServiceConnected(){ 
    if (isInit) { 
     return; 
    } 
    AccessibilityServiceInfo info = new AccessibilityServiceInfo(); 
    info.eventTypes = AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED; 
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN; 
    setServiceInfo(info); 
    isInit = true; 
} 

यह काम कर रहा है लेकिन वास्तव में मैं चाहता हूँ नहीं। यह वास्तव में कई अधिसूचनाएं दिखा रहा है जो स्टेटस बार में नहीं हैं और शायद पृष्ठभूमि ऐप्स द्वारा उत्पन्न किए जा रहे हैं जिन्हें मैं नहीं चाहता हूं। इसके अलावा यह वास्तविक समय नहीं है। यह केवल तब अपडेट होता है जब मैं ऐप को फिर से खोलता हूं और ऐप खुला होने पर नहीं। इसके अलावा, जैसे ही मैं सेटिंग्स में सेवा शुरू करता हूं, मेरा फोन (आकाशगंगा नोट) सबकुछ बात करना शुरू कर देता है। सुनिश्चित नहीं है कि यह कोड में एक बग या कुछ समस्या है।
मैं यह नहीं समझ सकता कि वास्तव में समस्या कहां है, लेकिन मुझे लगता है कि यह फीडबैक प्रकार हो सकता है। मैंने बहुत कोशिश की लेकिन सेवा के लिए कहीं भी विभिन्न फीडबैक प्रकारों का अर्थ नहीं मिला।

FEEDBACK_AUDIBLE 
FEEDBACK_HAPTIC 
FEEDBACK_AUDIBLE 
FEEDBACK_VISUAL 
FEEDBACK_GENERIC 

क्या कोई मुझे बता सकता है कि इन प्रतिक्रिया प्रकारों का क्या अर्थ है? और यदि मैं फीडबैक प्रकार बदलता हूं तो क्या मुझे अलग-अलग अधिसूचनाएं मिलेंगी? और अगर आपको लगता है कि मैं गलत दिशा में जा रहा हूं तो कृपया मुझे इन समस्याओं को हल करने के लिए क्या कर सकते हैं, कृपया मुझे मार्गदर्शन करें। लेमेम जानता है कि क्या मैं कुछ आवश्यक जानकारी प्रदान करना भूल गया हूं।

किसी भी प्रकार की सहायता की वास्तव में सराहना की जाएगी।

उत्तर

1

खैर मेरे पास आपके सभी सवालों के जवाब नहीं हैं लेकिन मैं आपको कुछ मदद कर सकता हूं। जैसा कि आपने बताया है कि आप केवल स्टेटसबार अधिसूचनाएं चाहते हैं, न कि अन्य टोस्ट्स और सभी की तरह। तो उस उद्देश्य के लिए, आप अपनी सेवा में निम्नलिखित कोड आज़मा सकते हैं।

info.notificationTimeout=100; 

मुझे आशा है कि यह आप के लिए काम करता है:

public void onAccessibilityEvent(AccessibilityEvent event) { 
    final int eventType = event.getEventType(); 
    if (eventType == AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED) { 
     Parcelable parcelable = event.getParcelableData(); 

     if(parcelable instanceof Notification){ 
      // statusbar notification 
      List<CharSequence> messages = event.getText(); 
      if (messages.size() > 0) { 
       // here you can do whatever you want with the notification. 
       //Log.d(tag, "Saved event"); 
      } 
     } 
    } 
} 

इसके अलावा अपने में एक टाइमआउट इस तरह onServiceConnected निर्धारित किया है।

+0

इससे मुझे स्टेटसबार अधिसूचनाएं लाने में मदद मिली। जवाब देने के लिए शुक्रिया। जैसा कि मैंने पहले उल्लेख किया है, अब मेरी समस्या का सामना करने वाली बड़ी समस्या है। मुझे लगता है कि यह एंड्रॉइड में एक बग है। अगर आप इसके साथ मेरी मदद कर सकते हैं तो मैं वास्तव में सराहना करता हूं। – Anjani

+0

लगता है जैसे आपने टॉकबैक एक्सेसिबिलिटी सेवा को एक्सेसिबिलिटी सेटिंग्स में स्विच किया है? – tommed

+0

आपका कोड सहायक था लेकिन मुझे यहां एक समस्या का सामना करना पड़ रहा है। यहां तक ​​कि इस कोड ने इसे हल नहीं किया। मुझे जो सामना करना पड़ रहा है वह यह है कि जब भी अधिसूचना स्टेटस बार में अधिसूचना आती है। मेरी 'ऑनएबिलिटीएवेंट (एक्सेसिबिलिटीएवेंट)' विधि को दो बार बुलाया जाता है, और मैंने इसे कई उपकरणों पर चेक किया है। इसे दो बार बुलाया जाता है। इसलिए जो कुछ भी मैं 'ऑनएबिलिटीएवेंट (एक्सेसिबिलिटीएवेंट)' में करता हूं, इसके कारण दो बार दोहराया जाता है। क्या कोई इसे हल करने में मेरी सहायता कर सकता है? –

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