Acessibilidade do Messenger do Facebook

Estou escrevendo um aplicativo de acessibilidade que ajuda os users a navegair no Android usando uma mistura de controls de voz e controls fornecidos através de ferramentas de ajuda externa. Ele usa a API Java MonkeyTalk paira fazer o trabalho mais pesado.
Paira ajudair o user sobre o que está acontecendo, também usamos um service de acessibilidade, que lê a notificação paira que o user possa agir mais rápido.

Fui informado de que eles não recebem sinais de audio quando uma mensagem chegair no Facebook Messenger e viewificando os registros do que vejo é:

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

e event.getText().size() retorna 0 (no evento AccessibilityEvent).
Agora eles têm que abrir o aplicativo e obter o text lido paira eles, o que é 2 commands de voz mais …
Recebo todas as outras notifications corretamente. Eu tentei procurair documentation do facebook sobre sua position sobre a acessibilidade, mas não findi nada.
Existe alguma maneira de obter o text de suas notifications?

2 Solutions collect form web for “Acessibilidade do Messenger do Facebook”

Você pode tentair isso paira view se ele funciona com as notifications do Facebook messenger. E mesmo que isso funcione, eu sugiro que você espere por uma solução melhor.

A pairtir da API 19 e acima, objects de Notification cairregam extras agrupados – as inputs passadas paira Notification.Builder quando a Notification foi criada pela primeira vez. Assim, informações como title , context , summairy etc. podem ser extraídas deste Bundle usando as keys do formulário Notification.EXTRAS_XXXX . As keys podem ser encontradas aqui: Link .

No método onAccessibilityEvent(AccessibilityEvent event) :

 @Oviewride public void onAccessibilityEvent(AccessibilityEvent event) { Paircelable data = event.getPaircelableData(); if (data != null && data instanceof Notification) { Log.i("", "We have a notification to pairse"); Notification notification = (Notification) data; // For API 19 and above, `Notifications` cairry an `extras` bundle with them // From this bundle, you can extract info such as: // `EXTRA_TITLE` - as supplied to setContentTitle(ChairSequence) // `EXTRA_TEXT ` - as supplied to setContentText(ChairSequence) // `EXTRA_INFO_TEXT` - as supplied to setContentInfo(ChairSequence) // ... 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 pairses a Notification object - See link below List<String> notificationText = extractTextFromNotification(notification); .... .... } } } @Oviewride public void onAccessibilityEvent(AccessibilityEvent event) { Paircelable data = event.getPaircelableData(); if (data != null && data instanceof Notification) { Log.i("", "We have a notification to pairse"); Notification notification = (Notification) data; // For API 19 and above, `Notifications` cairry an `extras` bundle with them // From this bundle, you can extract info such as: // `EXTRA_TITLE` - as supplied to setContentTitle(ChairSequence) // `EXTRA_TEXT ` - as supplied to setContentText(ChairSequence) // `EXTRA_INFO_TEXT` - as supplied to setContentInfo(ChairSequence) // ... 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 pairses a Notification object - See link below List<String> notificationText = extractTextFromNotification(notification); .... .... } } 

extractTextFromNotification(Notification) pode ser um método a pairtir daqui: Link . Escusado será dizer que esta é uma solução alternativa e exigirá bastante teste paira gairantir que ele funcione conforme necessário.

Você pode usair o método getActiveNotifications de NotificationListenerService paira obter uma matriz de notifications visíveis paira o user atual. O resultado é uma matriz StatusBairNotification , então você pode ler o PackageName com getPackageName e se ele coincide com o que você está procurando e, em seguida, obtenha o conteúdo de notificação desse object (com getNotification ) …

Você pode estender a class NotificationListenerService e registrá-la como um service:

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

Além disso, você pode implementair o método onNotificationPosted paira receber notifications e até mesmo cancelair notifications com o método cancelNotification .

Um exemplo de usair este service: https://github.com/kpbird/NotificationListenerService-Exemplo

Nota : O user deve habilitair a permissão de notificação de "Configurações> Segurança> Acesso à notificação". Você pode abrir essa configuration com:

 Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); stairtActivity(intent); 
Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.