2014-09-01 14 views
11

मैं एक एक्सेसिबिलिटी ऐप लिख रहा हूं जो उपयोगकर्ताओं को बाहरी सहायता उपकरण के माध्यम से प्रदान किए गए ध्वनि नियंत्रण और नियंत्रण के मिश्रण का उपयोग करके एंड्रॉइड पर नेविगेट करने में मदद करता है। यह भारी काम करने के लिए बंदरटाक जावा एपीआई का उपयोग करता है।
उपयोगकर्ता क्या हो रहा है इसके बारे में मदद करने के लिए हम एक एक्सेसिबिलिटी सेवा भी उपयोग करते हैं, जो अधिसूचना पढ़ता है ताकि उपयोगकर्ता कार्रवाई को तेज़ी से ले सके।फेसबुक मैसेंजर एक्सेसिबिलिटी

मैं सूचित किया गया है कि वे कोई ऑडियो क्यू जब संदेश फेसबुक मैसेंजर पर आता है मिलता है, और जाँच लॉग मैं क्या देख रहा है:

D/NotificationService(2665): package com.facebook.orcaText: [] 

और event.getText().size() रिटर्न 0 (AccessibilityEvent घटना पर)।
अभी उन्हें ऐप खोलना है और पाठ उन्हें पढ़ने के लिए है, जो 2 आवाज कमांड है ...
मुझे अन्य सभी अधिसूचनाएं सही तरीके से मिलती हैं। मैंने फेसबुक से एक्सेसिबिलिटी पर अपने रुख के बारे में दस्तावेज की तलाश करने की कोशिश की लेकिन मुझे कुछ भी नहीं मिला।
क्या उनके नोटिफिकेशन से टेक्स्ट प्राप्त करने का कोई तरीका है?

उत्तर

2

आप अगर यह फेसबुक मैसेंजर सूचनाओं के साथ काम करता है देखने के लिए इस कोशिश कर सकते हैं: आप के साथ उस सेटिंग खोल सकते हैं। और यहां तक ​​कि अगर यह काम करता है, तो भी मैं सुझाव दूंगा कि आप एक बेहतर समाधान की प्रतीक्षा करें।

एपीआई 19 और इसके बाद के संस्करण, Notification वस्तुओं बंडल ले जाने extras से - आदानों Notification.Builder के लिए पारित किया जब Notification पहले बनाया गया था। इसलिए, title, context, summary इत्यादि जैसी जानकारी Bundle से Notification.EXTRAS_XXXX की कुंजी का उपयोग करके निकाली जा सकती है। चाबियाँ यहां पाई जा सकती हैं: Link

ओवरराइड onAccessibilityEvent(AccessibilityEvent event) विधि में:

@Override 
public void onAccessibilityEvent(AccessibilityEvent event) { 
    Parcelable data = event.getParcelableData(); 

    if (data != null && data instanceof Notification) { 
     Log.i("", "We have a notification to parse"); 

     Notification notification = (Notification) data; 

     // For API 19 and above, `Notifications` carry an `extras` bundle with them 
     // From this bundle, you can extract info such as: 

     //  `EXTRA_TITLE`  - as supplied to setContentTitle(CharSequence) 
     //  `EXTRA_TEXT `  - as supplied to setContentText(CharSequence) 
     //  `EXTRA_INFO_TEXT` - as supplied to setContentInfo(CharSequence) 
     //  ... more at: http://developer.android.com/reference/android/app/Notification.html 

     Bundle b = noti.extras; 
     Log.i("Notification", "Title: " + b.get(Notification.EXTRA_TITLE)); 
     Log.i("Notification", "Text: " + b.get(Notification.EXTRA_TEXT)); 
     Log.i("Notification", "Info Text: " + b.get(Notification.EXTRA_INFO_TEXT)); 

     ///////////////////////////////////////////////////////////////// 

     // For API 18 and under: 

     // Pass `notification` to a method that parses a Notification object - See link below 

     List<String> notificationText = extractTextFromNotification(notification); 
     .... 
     .... 
    } 
} 

extractTextFromNotification(Notification) यहाँ से एक तरीका हो सकता है: Link। कहने की जरूरत नहीं है कि यह एक कामकाज है, और यह सुनिश्चित करने के लिए काफी परीक्षण की आवश्यकता होगी कि यह आवश्यकतानुसार काम करे।

+0

अभी हम api19 + का उपयोग करते हैं, इसलिए यह वास्तव में ठीक है। भविष्य में हम पुराने फोन का समर्थन करेंगे, शायद मैं फुफ्फुस दृश्य चाल का उपयोग करूंगा, मुझे यह पसंद आया! – sokie

+1

अतिरिक्त फ़ील्ड केवल सही काम करने के लिए साबित हुए! मैं अब बाकी अधिसूचना संदेशों के लिए इसका उपयोग कर रहा हूं। धन्यवाद! – sokie

+0

@sokie 'मैं अब बाकी अधिसूचना संदेशों के लिए इसका उपयोग कर रहा हूं।' बहुत बढ़िया! ऐसा करने के लिए आपको सिफारिश करने के बारे में सोचा नहीं था। – Vikram

0

वर्तमान उपयोगकर्ता को दिखाई देने वाली सूचनाओं की एक श्रृंखला प्राप्त करने के लिए आप NotificationListenerService का उपयोग कर सकते हैं। परिणाम एक StatusBarNotification सरणी है, तो तुम getPackageName साथ PackageName पढ़ सकते हैं और यदि यह आप देख रहे हैं कि साथ मेल खाता है, तो उस वस्तु से नोटिफिकेशन सामग्री (getNotification के साथ) मिलता है ...

आप NotificationListenerService विस्तार कर सकते हैं वर्ग और एक सेवा के रूप में यह रजिस्टर:

<service android:name=".NotificationListener" 
     android:label="@string/service_name" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
<intent-filter> 
    <action android:name="android.service.notification.NotificationListenerService" /> 
</intent-filter> 
</service> 

इसके अलावा, आप सूचनाएं प्राप्त करने के onNotificationPosted विधि को लागू करने और यहां तक ​​कि cancelNotification विधि के साथ सूचनाएं रद्द कर सकते हैं।

इस सेवा का उपयोग का एक उदाहरण: https://github.com/kpbird/NotificationListenerService-Example

नोट: उपयोगकर्ता "सेटिंग> सुरक्षा> नोटिफिकेशन की एक्सेस" से नोटिफिकेशन की अनुमति सक्षम करना होगा।

Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); 
startActivity(intent); 
+0

यह अभी भी फेसबुक मैसेंजर के लिए खाली आता है। – sokie

+0

कृपया इस्तेमाल किए गए कोड को पोस्ट करें। – semsamot

+0

क्या आपने इस संदेश को फेसबुक मैसेंजर के साथ आजमाया था? मुझे किसी भी अन्य अधिसूचना तक पहुंचने में कोई समस्या नहीं है, केवल एक ही खाली है जो फेसबुक मैसेंजर है। – sokie

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