android获取堆叠的通知栏信息

需求背景

        由于公司是做蓝牙可穿戴设备的,其中有一个向设备推送第三方的推送消息的功能。

主要API

        NotificationLisenerService:android提供获取通知的服务

主要代码

  继承NotificationLisenerService 并重写onNotificationPosted(StatusBarNotification sbn)方法与onNotificationRemoved(StatusBarNotification sbn)方法。

        onNotificationPosted(StatusBarNotification sbn)是在通知栏有新通知到来时调用  

@Override
public void onNotificationPosted(StatusBarNotification sbn) {
   
Bundle extras = sbn.getNotification().extras;        //获取bundle对象
String nameFun1 = extras.getString(Notification.EXTRA_TITLE);    //获取通知的标题
CharSequence charSequence = extras.getCharSequence(Notification.EXTRA_TEXT);    // 获取通知的内容
}

        此时新来的新通知信息保存在sbn对象中,对于WeChat,QQ等一些通知是可以获取到信息的。但是对于Whatsapp,由于

whatsapp的推送是采用堆叠的通知方式,只能获取到最后面的一条,导致多人聊天时只能获取到第一个聊天对象的最后一条数据。

        经过认真的研究发现NotificationLisenerService内置一个方法getActivityNotifications();顾名思义是得到所有活动在通知栏的通知信息

StatusBarNotification[] statusBarNotifications = getActiveNotifications();    //这个方法是得到一个StatusBarNotification的数组,就是所有的活动通知

        然后尝试在onNotificationPosted(StatusBarNotification sbn)中增加此方法,发现能够获取通知栏的所有信息但是不包括最新的一条,个人猜测是先获取通知然后在将通知放入通知的容器中,此时容器中还没有最新的数据。心中有所猜测后就决定尝试,延时获取在onNotificationPosted(StatusBarNotification sbn)方法中加入

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        StringBuffer contents = new StringBuffer();
        try{
            StatusBarNotification[] statusBarNotifications = getActiveNotifications();
            for(StatusBarNotification statusBarNotification : statusBarNotifications) {
                Bundle extras2 = statusBarNotification.getNotification().extras;
              CharSequence title = extras2.getCharSequence(Notification.EXTRA_TITLE);
              CharSequence text = extras2.getCharSequence(Notification.EXTRA_TEXT);
              if (title != null) {
                   Log.e(TAG, ">>>>>收到通知6:" + title.toString());
                   contents.append(title.toString());
              }
              if (text != null) {
                   Log.e(TAG, ">>>>>收到通知7:" + text.toString());
                   contents.append(text.toString());
                   contents.append(";");
               }
            }
} catch (Exception e) { e.printStackTrace() ; } }} , 1000) ;        此时打印出来能看到whatsapp的最新消息。

        onNotificationRemoved(StatusBarNotification sbn)是在通知栏通知被移除时调用

        

@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
    super.onNotificationRemoved(sbn);
}

    小结:

            当碰到困难时,多看看API还给开发者提供了哪些可用的方法可以调用。

            由于只是写针对性的问题,获取使用通知权限的一些过程就不写了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值