Android – Получение уведомлений при их складывании (прослушиватель уведомлений)

Я пытаюсь читать уведомления с помощью API-интерфейсов уведомлений Android 4.3. Я следил за несколькими учебниками. Например: http://gmariotti.blogspot.hk/2013/11/notificationlistenerservice-and-kitkat.html?view=magazine

Также этот вопрос не решает мою проблему, так как я не хочу читать уведомления Big View. Я могу это сделать

Получение подробного / расширенного текста из уведомлений на Android?

Это мой код:

Log.d(logtag,"CharSequence - Title: "+sbn.getNotification().extras.getCharSequence("android.title")+ " CharSequence - textLines: "+sbn.getNotification().extras.getCharSequence("android.textLines")+ " CharSequence - subText: "+sbn.getNotification().extras.getCharSequence("android.subText")+ " CharSequence - text: "+sbn.getNotification().extras.getCharSequence("android.text")+ " CharSequence - infoText: "+sbn.getNotification().extras.getCharSequence("android.infoText")+ " CharSequence - summaryText: "+sbn.getNotification().extras.getCharSequence("android.summaryText")); Log.d(logtag,"String - Title: "+sbn.getNotification().extras.getString("android.title")+ " String - textLines: "+sbn.getNotification().extras.getString("android.textLines")+ " String - subText: "+sbn.getNotification().extras.getString("android.subText")+ " String - text: "+sbn.getNotification().extras.getString("android.text")+ " String - infoText: "+sbn.getNotification().extras.getString("android.infoText")+ " String - summaryText: "+sbn.getNotification().extras.getString("android.summaryText")); Log.d(logtag, "--------------------------------------------------------------------------------------------"); Notification mNotification=sbn.getNotification(); if (mNotification!=null){ Bundle extras = mNotification.extras; String notificationTitle = extras.getString(Notification.EXTRA_TITLE); Bitmap notificationLargeIcon = ((Bitmap) extras.getParcelable(Notification.EXTRA_LARGE_ICON)); CharSequence notificationText = extras.getCharSequence(Notification.EXTRA_TEXT); CharSequence notificationSubText = extras.getCharSequence(Notification.EXTRA_SUB_TEXT); CharSequence notificationTextLines = extras.getCharSequence("android.textLines"); Log.d(logtag, "New Title: "+notificationTitle); Log.d(logtag, "New Text: "+notificationText); Log.d(logtag, "New subText: "+notificationSubText); Log.d(logtag, "New textLines: "+notificationTextLines); Log.d(logtag, "--------------------------------------------------------------------------------------------"); 

И это мой выход ADB с экрана:

 D/AANN - NotificationListener﹕ CharSequence - Title: Alex CharSequence - textLines: null CharSequence - subText: null CharSequence - text: null CharSequence - infoText: null CharSequence - summaryText: 8 new messages. D/AANN - NotificationListener﹕ String - Title: Alex String - textLines: null String - subText: null String - text: null String - infoText: null String - summaryText: 8 new messages. D/AANN - NotificationListener﹕ New Title: WhatsApp D/AANN - NotificationListener﹕ New Text: null D/AANN - NotificationListener﹕ New subText: null D/AANN - NotificationListener﹕ New textLines: null 

То, что я пытаюсь сделать, это получить каждое из этих уведомлений либо как объектную строку, либо как угодно. Все, что мне нужно, это текстовое, заголовочное и исходное приложение из каждого из этих уведомлений.

Как вы можете видеть, Объект, который я сейчас получаю, возвращает только Null, когда я пытаюсь получить текст из уведомления

View post on imgur.com

Потому что уведомление использует таможню сейчас, поэтому нам нужно использовать какой-то трюк.

Вы также можете искать «удаленный просмотр gettext» …

Извлечение текста из объекта RemoteViews

 public void onNotificationPosted(StatusBarNotification sbn) { Notification mNotification = sbn.getNotification(); Log.v("mNotification.toString()", getText(mNotification).toString()); 

//

 public static List<String> getText(Notification notification) { // We have to extract the information from the view RemoteViews views = notification.bigContentView; if (views == null) views = notification.contentView; if (views == null) return null; // Use reflection to examine the m_actions member of the given RemoteViews object. // It's not pretty, but it works. List<String> text = new ArrayList<String>(); try { Field field = views.getClass().getDeclaredField("mActions"); field.setAccessible(true); @SuppressWarnings("unchecked") ArrayList<Parcelable> actions = (ArrayList<Parcelable>) field.get(views); // Find the setText() and setTime() reflection actions for (Parcelable p : actions) { Parcel parcel = Parcel.obtain(); p.writeToParcel(parcel, 0); parcel.setDataPosition(0); // The tag tells which type of action it is (2 is ReflectionAction, from the source) int tag = parcel.readInt(); if (tag != 2) continue; // View ID parcel.readInt(); String methodName = parcel.readString(); if (methodName == null) continue; // Save strings else if (methodName.equals("setText")) { // Parameter type (10 = Character Sequence) parcel.readInt(); // Store the actual string String t = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(parcel).toString().trim(); text.add(t); } // Save times. Comment this section out if the notification time isn't important else if (methodName.equals("setTime")) { // Parameter type (5 = Long) parcel.readInt(); String t = new SimpleDateFormat("h:mm a").format(new Date(parcel.readLong())); text.add(t); } parcel.recycle(); } } // It's not usually good style to do this, but then again, neither is the use of reflection... catch (Exception e) { Log.e("NotificationClassifier", e.toString()); } return text; } 
Intereting Posts
Есть ли какой-то генератор «Feature Graphic» для Google Play? Android, как читать обфускацию кода Java после прохождения обратной инженерии Клиент MQTT Eclipse Paho на Android, отключает зависает и никогда не завершает Java Arraylist удаляет несколько элементов по индексу Ошибка градиента со знаком доллара Вызывается onServiceConnected только после службы onCreate? Как настроить взаимодействие с ScrollView, чтобы пользователи случайно не прокручивались в неправильном направлении? Как определить сделанный вызов является локальным или STD ИЛИ ISD Какой самый простой способ поддерживать синхронизацию базы данных между несколькими устройствами iOS и Android? GetActivity () не может найти символ символа: метод getActivity () Android aws код ошибки, уже принадлежащий вам Что делает KeyListener? Невозможно создать экземпляр приемника в SMS-сообщении BroadcastReceiver ImageView переформатируется, когда на нем нарисована рамка Базовая связь между двумя фрагментами