Intereting Posts
Как сохранить целочисленный массив в SharedPreferences? Несовместимые плагины для android-apt после обновления до Android Studio 2.3 Почему аппаратное ускорение не работает на моем представлении? Почему существуют разные возможности для активных и неактивных значков в материальном дизайне? Android: настройка onClickListener на часть текста в TextView – проблема Android 4.3: Родной сбой в unkown.unknown Как получить UUID устройства в ионной структуре Android – как отправлять отчеты о сбоях? Копирование файла APK в проекте Android Gradle Расширение класса Android для добавления dropshadow Расширенная панель инструментов с пользовательским представлением, не отображаемым с полной шириной Проблемы с использованием последних банок из Square – модификация, okhttp, okio и okhttp-urlconnection Не удалось создать экземпляр com.android.menubar.internal.MenuBarEnhancerCocoa Нечисловой второй аргумент в "wordlist" Почему Android BottomNavigationView не отображается?

Надежный способ получения данных StatusbarNotification (название, текст уведомления)

Я хотел бы получить как можно больше информации из StatusBarNotification -объекта. В настоящее время единственной «надежной» информацией, к которой можно получить доступ, является tickerText . Я использую следующий код, чтобы получить название и текст уведомления через RemoteViews , но много времени, название и / или текст просто будут null :-(:

  //Get the title and text String mTitle = ""; String mText = ""; try { RemoteViews remoteView = sbn.getNotification().contentView; LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); ViewGroup localView = (ViewGroup) inflater.inflate(remoteView.getLayoutId(), null); remoteView.reapply(getApplicationContext(), localView); TextView tvTitle = (TextView) localView.findViewById(android.R.id.title); TextView tvText = (TextView) localView.findViewById(16908358); mTitle = (String)tvTitle.getText(); mText = (String)tvText.getText(); } catch (Exception e){ Log.e(TAG, "Error getting notification title/text: " + e); } 

Есть ли альтернативный (более надежный) способ? Я мог бы «вручную» указать идентификаторы ресурсов для «популярных» уведомлений, таких как Gmail, SMS и т. Д., Но это может сломаться в любое время, когда эти приложения будут обновлены. Благодаря!

Solutions Collecting From Web of "Надежный способ получения данных StatusbarNotification (название, текст уведомления)"

С Android 4.4 (KitKat), API уровня 19 вы можете использовать Notification.extras attibute, чтобы получить название, текст, ….

http://gmariotti.blogspot.com/2013/11/notificationlistenerservice-and-kitkat.html

Проверка идентификаторов ресурсов – это то, как TalkBack, программа чтения с экрана Android, анализирует типы уведомлений. Он пытается загрузить идентификаторы непосредственно из разных пакетов.

Проверьте источник в Google Code для полного примера. Вот фрагмент:

 private static int ICON_GMAIL; private static boolean sHasLoadedIcons = false; private static void loadIcons(Context context) { ... ICON_GMAIL = loadIcon(context, "com.google.android.gm", "com.google.android.gm.R$drawable", "stat_notify_email"); sHasLoadedIcons = true; } public static NotificationType getNotificationTypeFromIcon(Context context, int icon) { if (!sHasLoadedIcons) { loadIcons(context); } ... if (icon == ICON_GMAIL) { return NotificationType.EMAIL; } }