1、概述
很有意思,第一次做推送的时候,需要用到弹通知,就遇到这个问题了,就是intent putExtra后,参数一直显示的都是第一个intent的参数,以后传参数就没用了,或者为null。
2、第一次对于notification 传参数为null的解决,也就是百度能百到的最多的答案
添加一行
noticeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
关于这个属性的意义其实和android activity的四种启动模式相关。
具体的参见:http://www.sjsjw.com/kf_mobile/article/030079ABA017071.asp
简略参见:http://blog.sina.com.cn/s/blog_6e51958501015bsx.html
当时就糊里糊涂的设了这个属性,可以了,很开心也就pass了。
3、第二次再遇到该问题
后来推送方案优化了,尼玛,这个问题又出现了noticeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 这行还是在的但是出了这个问题,那个蛋疼
后来改谷歌了,很多也是提示加这行或者是
noticeIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); 其实这两行并没有多大区别,仅仅是移除一些activity保证跳转的时候能准确的调用onCreate()而已(我是这么理解地)
3、第二次解决该问题
谷歌了好久 参考链接:http://stackoverflow.com/questions/14338579/intent-getextras-always-returns-null
虽然楼主最后解决问题地时候用了一句:It worked. I was passing 0 instead of PendingIntent.FLAG_UPDATE_CURRENT. 把我搞蒙了,以为还是得用0,
但是我改成以下句子后,确实是起到了作用。
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
解决者描述了问题,大概意思就是说:设备得参数是0得话,如果之前已经存在
PendingIntent就会调用已有得,当然参数就传不过去了
设置成PendingIntent.FLAG_UPDATE_CURRENT 就会更新该PendingIntent 达到传参数
4、两组代码对比
noticeIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
public static void post(Context context, Intent intent, PushNotificationEntity noticePushEntity) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setTicker(noticePushEntity.getContentText()).setContentTitle(noticePushEntity.getContentTitle())
.setContentText(noticePushEntity.getContentText()).setWhen(0).setAutoCancel(true)
.setSmallIcon(R.drawable.icon);
if (intent != null) {
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
}
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
int num = (int) System.currentTimeMillis();
Notification notification = builder.build();
if (Constants.isOpenVoice && Constants.isShake) {
notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
} else if (Constants.isShake && !Constants.isOpenVoice) {
notification.defaults = Notification.DEFAULT_VIBRATE;
} else if (!Constants.isShake && Constants.isOpenVoice) {
notification.defaults = Notification.DEFAULT_SOUND;
}
nm.notify(num, notification);
}
public static void post(Context context, Intent intent, PushNotificationEntity noticePushEntity) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setTicker(noticePushEntity.getContentText()).setContentTitle(noticePushEntity.getContentTitle())
.setContentText(noticePushEntity.getContentText()).setWhen(0).setAutoCancel(true)
.setSmallIcon(R.drawable.icon);
if (intent != null) {
builder.setContentIntent(PendingIntent.getActivity(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT
));}
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
int num = (int) System.currentTimeMillis();
Notification notification = builder.build();
if (Constants.isOpenVoice && Constants.isShake) {
notification.defaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE;
} else if (Constants.isShake && !Constants.isOpenVoice) {
notification.defaults = Notification.DEFAULT_VIBRATE;
} else if (!Constants.isShake && Constants.isOpenVoice) {
notification.defaults = Notification.DEFAULT_SOUND;
}
nm.notify(num, notification);
}