2014-09-01 18 views
11

Kullanıcıların harici yardım araçlarıyla sağlanan ses kontrolleri ve kontrolleri karışımını kullanarak android üzerinde gezinmelerine yardımcı olan bir erişilebilirlik uygulaması yazıyorum. Daha ağır işleri yapmak için MonkeyTalk Java API'sini kullanır.
Kullanıcılara neler olup bittiği hakkında yardımcı olmak için, kullanıcının daha hızlı hareket edebilmesi için bildirim okuyan bir erişilebilirlik hizmeti de kullanıyoruz.Facebook messenger erişilebilirlik

Bir mesaj facebook messenger geldiğinde hiçbir ses işaret almak haberdar ve gördüklerimi günlükleri kontrol ediyor ettik: 0 (AccessibilityEvent olayı)

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

ve event.getText().size() döner.
Şu anda uygulamayı açmak ve metni okumanız gerekiyor, bunlar 2 sesli komut daha var ...
Diğer tüm bildirimleri doğru şekilde aldım. Facebook'tan erişilebilirlik konusundaki duruşlarıyla ilgili belgeleri aramayı denedim ama hiçbir şey bulamadım.
Bildirimleri metinden almanın bir yolu var mı?

cevap

2

: Sen ile bu ayarı açabilirsiniz. Ve bu işe yarasa bile, daha iyi bir çözüm beklemenizi öneririm. Notification önce oluşturulduğu zaman Notification.Builder geçirilen girişler - API 19 ve üzeri, Notification nesneleri birlikte taşırlar extras kaynaktan

. Bu nedenle, Notification.EXTRAS_XXXX formundaki anahtarlar kullanılarak title, context, summary vb. Gibi bilgiler bu Bundle'dan ayıklanabilir. Anahtarlar şu adreste bulunabilir: Link. overriden onAccessibilityEvent(AccessibilityEvent event) yöntemde

:

@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) buradan bir yöntem olabilir: Link. Bunun bir geçici çözüm olduğunu söylemek gereksizdir ve gerektiği gibi çalıştığından emin olmak için biraz test yapılmasını gerektirecektir.

+0

Şu anda api19 + kullanıyoruz, bu yüzden gerçekten sorun değil. Gelecekte daha eski telefonları destekleyeceğiz, belki de şişirilmiş görünüm numarasını kullanacağım, bunu sevdim! – sokie

+1

Ekstra alanların kusursuz çalıştığı kanıtlandı! Ben de bildirim mesajlarının geri kalanı için şimdi kullanıyorum.Teşekkür ederiz! – sokie

+0

@sokie 'Şimdi bildirim iletilerinin geri kalanı için de kullanıyorum.' Awesome! Bunu yapmanızı tavsiye etmeyi düşünmemiştim. – Vikram

0

Geçerli kullanıcı tarafından görülebilecek bir bildirim dizisi almak için NotificationListenerService numaralı getActiveNotifications yöntemini kullanabilirsiniz. sonuç bir StatusBarNotification dizidir, Yani

Sen NotificationListenerService uzatabilirsiniz ... getPackageName ile PaketAdı okuyun ve aradığınız bununla eşleşirse, o zaman (getNotification birlikte) o nesneden bildirim içeriklerini alabilirsiniz sınıf ve bir hizmet olarak kaydetmek:

<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> 

Ayrıca bildirimleri almak için onNotificationPosted yöntemini uygulamak ve hatta cancelNotification yöntemle bildirimleri iptal edebilirsiniz.

bu hizmeti kullanımına bir örnek: https://github.com/kpbird/NotificationListenerService-Example

Not: Kullanıcı "Ayarlar> Güvenlik> Bildirim erişimi" bildirim izni etkinleştirmesi gerekir. Bunu Facebook messenger bildirimleri ile çalışıp çalışmadığını görmek için bu deneyebilirsiniz

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

Bu hala facebook messenger için boş döner. – sokie

+0

Lütfen kullandığınız kodu gönderin. – semsamot

+0

Bu kodu facebook messenger ile denediniz mi? Başka bir bildirime erişmede sorun yaşıyorum, boş olan tek kişi facebook messenger. – sokie