Доступность сообщений в Facebook

Я пишу приложение доступности, которое помогает пользователям перемещаться по андроиду, используя смесь голосовых средств управления и элементов управления, предоставляемых с помощью внешних инструментов помощи. Он использует API-интерфейс MonkeyTalk для выполнения более тяжелой работы.
Чтобы помочь пользователю в том, что происходит, мы также используем службу доступности, которая считывает уведомление, чтобы пользователь мог быстрее действовать.

Мне сообщили, что они не получают звуковой сигнал, когда сообщение приходит на facebook messenger и проверяет журналы, что я вижу:

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

И event.getText().size() возвращает 0 (событие AccessibilityEvent).
Сейчас им нужно открыть приложение и получить прочитанный им текст, что еще 2 голосовых команды …
Я получаю все остальные уведомления правильно. Я попытался найти документацию из facebook об их позиции по доступности, но я ничего не нашел.
Есть ли способ получить текст из своих уведомлений?

    Вы можете попробовать это, чтобы узнать, работает ли оно с уведомлениями Facebook-мессенджера. И даже если это сработает, я предлагаю вам подождать лучшего решения.

    Из API 19 и выше, объекты Notification несут в комплекте extras компоненты – входы, переданные Notification.Builder когда Notification было впервые создано. Таким образом, информация, такая как title , context , summary и т. Д., Может быть извлечена из этого пакета с использованием ключей формы Notification.EXTRAS_XXXX . Ключи можно найти здесь: Ссылка .

    В режиме overriden 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 . Излишне говорить, что это обходной путь, и потребует довольно много тестирования, чтобы обеспечить его работу по мере необходимости.

    Вы можете использовать метод getActiveNotifications для NotificationListenerService для получения массива уведомлений, которые видны текущему пользователю. Результатом этого является массив StatusBarNotification , поэтому вы можете прочитать имя пакета с getPackageName и, если оно соответствует тому, которое вы ищете, затем получить содержимое уведомлений с этого объекта (с помощью 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 метода cancelNotification .

    Пример использования этой службы: https://github.com/kpbird/NotificationListenerService-Example

    Примечание . Пользователь должен разрешить разрешение уведомлений из «Настройки> Безопасность> Доступ к уведомлению». Вы можете открыть эту настройку с помощью:

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