Android通知栏多条通知冲突的问题

最近做消息推送,遇到了一些问题,在搜查相关问题进行处理后,在这里总结一下。

非自定义通知,需要查找相关内容的童鞋请移步。

问题一:FLAG_UPDATE_CURRENT和FLAG_CANCEL_CURRENT

主要会用到这两个参数。FLAG_UPDATE_CURRENT会更新之前PendingIntent的消息,比如,你推送了通知A,并在其中的Intent中putExtra了一个值“123”,在未点击该通知前,继续推送第二条通知B,并在其中的Intent中putExtra了一个值“456”。如果你单击通知A或者通知B,你会发现,A和B的Intent中读取过来的信息都是“456”,也就是说,B替换了A的数据。

当使用FLAG_CANCEL_CURRENT时,依然是上面的操作步骤,这时候会发现,点击通知A时没反应,通知B可以点击。

PendingIntent contentIntent = PendingIntent.getActivity(context,  num,
                                            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

原因:导致这个问题的原因在于第二个参数num,当每次发出通知num的值都相同时,后面发出的通知就会对前面的通知起作用。

解决方案:为了避免后面发出的通知影响之前的通知,num的值每次都需要设置不同的内容。这里我是获取了一个随即整数进行设置。

问题二:只显示一条通知

描述:推送通知A,未点击通知A之前,又发出一个通知B,这时通知B会将通知A覆盖,也就是说通知只会存在一条。不确定是不是手机系统的原因,目前我在小米手机上出现了这个问题。

原因:NotificationManager.notify(flag, notification);这个方法是发出通知,flag是为了标识应用。如果flag是一个常量,每次发出通知都表明是同一个应用发送的通知,如果通知栏已经存在这个应用发出的通知,就会将通知覆盖。

解决方案:为了避免后面的通知覆盖前面的通知,从而实现多条通知同时存在的效果。这里我也是为flag设置了一个随机整数。



其他相关:

1,添加声音:

notification.defaults|=Notification.DEFAULT_SOUND;//使用默认的系统提示音。

notification.sound=Uri.parse("file:///sdcard/music/notification.mp3");  //使用自定义提示音

notification.sound=Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI,"6"); //使用系统自带铃声

notification.flags|=notification.FLAG_INSISTENT; //声音循环播放

注意:如果default、sound同时出现,那么sound无效,会使用默认铃声。 

2,添加振动效果:

notification.defaults|=Notification.DEFAULT_VIBRATE; //使用默认的振动方式

long[]vibrate={0,100,200,300}; notification.vibrate=vibrate; //使用自定义的振动形式

注意:Long型数组中,第一个参数是开始振动前等待的时间,第二个参数是第一次振动的时间,第三个参数是第二次振动的时间,以此类推,随便定义多长的数 组。但是采用这种方法,没有办法做到重复振动。 同样,如果default、vibrate同时出现时,会采用默认形式。 

使用振动需要添加权限:<uses-permissionandroid:name="android.permission.VIBRATE"></uses-permission> 

3,点击通知后,通知自动消失:notification.flags |= Notification.FLAG_AUTO_CANCEL;

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值