android notification intent putExtra传参数null

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);

}




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值