В классе NotificationListenerService
есть функции onNotificationPosted(StatusBarNotification sbn)
и onNotificationRemoved(StatusBarNotification sbn)
.
Рассмотрим функцию onNotificationPosted(StatusBarNotification sbn)
.
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
String pack = sbn.getPackageName();
String ticker = new String();
if(sbn.getNotification().tickerText != null) {
ticker = sbn.getNotification().tickerText.toString();
}
Bundle extras = sbn.getNotification().extras;
String title = extras.getString("android.title");
String text = extras.getCharSequence("android.text").toString();
int id1 = extras.getInt(Notification.EXTRA_SMALL_ICON);
Bitmap id = sbn.getNotification().largeIcon;
}
Итак, с этой функцией яКонечно, я могу получить заголовок, текст, значок приложения и имя пакета любых новых уведомлений, которые приходят на мобильное устройство, из моего собственного приложения для Android.Я хочу получить имя приложения для уведомления (например, если имя пакета com.kpbird.nlsexample
, имя приложения NLService
, поэтому имя приложения может значительно отличаться от части имени пакета справа отсамая правая точка в названии пакета).Как я могу сделать это, извлекая имя приложения из опубликованного в строке состояния уведомления мобильного устройства о новых уведомлениях по мере их поступления, навсегда?
for(String key : extras.keySet())
{
Log.i("Key", key);
}
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.title
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.subText
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.showChronometer
2018-12-07 11: 49: 56.543 26392-26392/android.notificationlistener I / Key: android.icon
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.text
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.progress
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.progressMax
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.appInfo
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.showWhen
2018-12-07 11: 49: 56.543 26392-26392 / android.IliserListerer I / Key: android.largeIcon
2018-12-07 11: 49: 56.543 26392-26392 / Iroid.notificationlistener I / Key: android.infoText
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.originatingUserId
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.progressIndeterminate
2018-12-07 11: 49: 56.543 26392-26392 / android.notificationlistener I / Key: android.remoteInputHistory
Похоже, что в Bundle extras
нет доступных ключей дляполучить имя приложения.Также, похоже, нет переменной, объявленной в StatusBarNotification sbn
классе, доступном для получения имени приложения.Однако, похоже, что можно получить временную метку, которая, по сути, является временем, когда любое уведомление было отправлено в строку состояния мобильного устройства из класса StatusBarNotification sbn
для новых уведомлений по мере их поступления.
StatusBarNotifications.java
приватный финал String pkg;
приватный финал int id;
приватный финал тег String;
приватный финалСтроковый ключ;
private String groupKey;
private String overrideGroupKey;
private final int uid;
private final String opPkg;
private final int initialPid;
личное уведомление об окончательном уведомлении;
приватный конечный пользователь UserHandle;
приватное окончательное long postTime;