Android /使用任何状态栏通知的应用程序名称获取

时间:2018-12-07 07:01:37

标签: android notifications android-notifications android-statusbar notification-listener

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私人用户;

     

私人最终较长的发布时间;

0 个答案:

没有答案