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的值。