Android / Получение с именем приложения любого уведомления в строке состояния - PullRequest
0 голосов
/ 07 декабря 2018

В классе 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;

...