android 通知覆盖以及PendingIntent参数问题

本文讨论了在使用极光推送(JPush)集成时遇到的自定义通知覆盖问题。针对该问题,指出需为每个通知设置独特的ID以避免覆盖。另外,提到了PendingIntent在跳转Activity时数据相同的问题,解决方法是确保 PendingIntent.getActivity 的第二个参数不同。最后,提到了点击通知启动新Activity时,需要设置Intent的setTag以及添加FLAG_ACTIVITY_NEW_TASK标志。附有JPush自定义消息和通知源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于极光推送的集成我就不多说了,集成之后,我们一般都是自定义消息的,但是如果自定义消息的话,就意味着我们还得自定义Notification。
1:有时我们会碰到这样的问题:一次发送多个自定义消息,此时我们通知会覆盖前一个通知,也就是显示一个通知,并且是最新的通知。关于这个问题,

 notificationManager.notify(notifyId, notification);

我们可以看到 第一个参数是设置一个id,造成这个问题,就是因为我们没有设置这个ID,如果我们需要显示多个通知,这个ID应该传入不同的值, 如下:

NotificationManager notificationManager = 
                (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
int notifyId = (int) System.currentTimeMillis();
// 将通知加入状态栏,标记为id;notifyID不能相同,防止多个通知的话,产生通知覆盖;

notificationManager.notify(notifyId, notification);

2:第二个坑就是:当我们的PendingIntent跳转到相应的Activity时,在Activity中获取到的数据是一样的值,这是因为我们的PendingIntent.getActivity第二个参数没有设置(设置成了相通的值),应该设置成不一样的值

// 第二个参数不能写死,可以写一个随机数或者是时间毫秒数 保证唯一,防止跳转之后获得的Intent数据不变
PendingIntent pendingIntent = 
                PendingIntent.getActivity(context, (int)(Math.random() * 100), intent, PendingIntent.FLAG_UPDATE_CURRENT);

3:第三个坑:当我们点击通知之后,又开启了一个Activity ,这是因为Intent的setTag没有设置:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

至于FLAG_ACTIVITY_NEW_TASK 的添加 是因为:从非activity的非正常途径启动一个activity,比如从一个service或者broadcastreceiver中启动一个activity,则intent必须要添加FLAG_ACTIVITY_NEW_TASK标记。

附上JPush自定义消息和通知源码地址:http://download.csdn.net/download/lmq121210/9929808

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值