notification点击并带数据跳转到具体页面

 public int notify(MPushMessage message, Intent clickIT) {
        if (message == null || clickIT == null) return -1;
        Integer nid = message.getNid();
        //1.如果NID不存在则新生成一个,且新生成的Id在nIds是不存在的
        if (nid == null || nid <= 0) {
            do {
                nid = nIdSeq++;
            } while (nIds.containsKey(nid));
        }

        //处理总数
        Integer count = nIds.get(nid);
        if (count == null) {
            count = 0;
        }
        nIds.put(nid, ++count);
        Intent cancelIT = new Intent(MPushReceiver.ACTION_NOTIFY_CANCEL);//取消通知意图
        cancelIT.putExtra(EXTRA_MESSAGE_ID, nid);
        clickIT.putExtra(EXTRA_MESSAGE_ID, nid);//putExtras的key和value,在myReceiver里面接收到点击跳转动作是进行处理跳转到具体页面

        // TODO: 2018/2/2
        //现在是点击跳转到网络订单页面
        if (context != null) {
         String   orderNun = message.getContent().substring(message.getContent().indexOf("[") + 1, message.getContent().indexOf("]"));
            Intent intent;
            if (message.getContent().contains("货流")){
                clickIT.putExtra(Constants.ORDER_NUM,orderNun);
                clickIT.putExtra(Constants.INTENT_TYPE,"货流");
//                intent  = new Intent(context, StockFlowActivity.class);
            }else if(message.getContent().contains("网络")) {
//                intent = new Intent(context, WebOrderActivity.class);
                clickIT.putExtra(Constants.ORDER_NUM,orderNun);
                clickIT.putExtra(Constants.INTENT_TYPE,"网络");
            }else {
//                intent = new Intent(context, MainActivityV2.class);
                clickIT.putExtra(Constants.ORDER_NUM,orderNun);
            }

//            PendingIntent clickPI = PendingIntent.getActivity(context, 0, clickIT, PendingIntent.FLAG_CANCEL_CURRENT);//处理点击
          PendingIntent clickPI = PendingIntent.getBroadcast(context, nid, clickIT, PendingIntent.FLAG_UPDATE_CURRENT);//处理点击
            PendingIntent cancelPI = PendingIntent.getBroadcast(context, 0, cancelIT, 0);//处理滑动取消
            content = message.getContent();
            push_content = content.substring(content.indexOf(":") + 1);
            //实例化通知栏构造器NotificationCompat.Builder:
            nm.notify(nid, build(clickPI, cancelPI,
                    message.getTicker(),
                    message.getTitle(),
                    push_content,
                    count));


        }
        Log.e("freak","message="+message.getContent());
        return nid;
    }
一、获取到推送的消息,并截取自己需要的数据,在notification设置的intent上设置数据回传,例如:

clickIT.putExtra(Constants.ORDER_NUM,orderNun);//这里通过了key和value的方式put进了intent对象,在跳转的activity里面根据id去拿到具体的数据
二、还有一个就是多个notification的点击,平时我们做的demo都是默认点击最新的那一个,现在如果我们需要在得到多个notification的情况下进行点击,并得到我们点击的notification的数据的话,我们需要在
PendingIntent设置的时候就要设施notification的id,根据这个id去得到我们点击的是notification的哪一个。

问题主要出在PendingIntent.getActivity()或者PendingIntent.getBroadcast()的第二个参数,平常demo直接写0的,应用场景不同所以没出问题,实际上是通过该参数来区别不同的intent的,如果id相同,就会覆盖掉之前的intent了。所以总是获取到最后一个intent。

最后改成:

PendingIntent clickPI = PendingIntent.getBroadcast(context, nid, clickIT, PendingIntent.FLAG_UPDATE_CURRENT);//处理点击
第二个参数就是每一次接收到一个推送显示的notification的id,也就是告诉你这是第几条推送,根据这个值就可以得到具体的notification的值了,而不是得到最新的额notification的值。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值