在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.notificationlistener I / Key:android.largeIcon
2018-12-07 11:49:56.543 26392-26392 / android.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
类张贴到移动设备的状态栏中的时间。 / p>
public abstract class NotificationObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged<T>(Expression<Func<T>> me)
=> RaisePropertyChanged((me.Body as MemberExpression)?.Member.Name);
protected virtual void RaisePropertyChanged(string propertyName)
=> PropertyChanged?.Invoke(this, propertyName);
}
私有最终字符串pkg;
私有最终int ID;
私有最终String标记;
私有最终字符串密钥;
私有字符串groupKey;
私有字符串overrideGroupKey;
私有最终内部智慧;
private final String opPkg;
private final int initialPid;
私人最终通知通知;
最终的UserHandle私人用户;
私人最终较长的发布时间;