Notification的使用

  这两天在书上看了一些Notification通知相关的资料,自己尝试了一下遇到了一些问题。经过在网上查找和自己尝试最后总算基本上实现了自己的想法。现在整理一下以防以后忘记。

  在使用Notification时主要有两种想法,一、在应用中每发送一次出现一个通知,并且每点一个通知显示自己通知相应的内容。二、在应用中发送多次通知只显示一个通知,但在通知上显示出收到通知的条数。

  对于是否出现多个通知可以通过NotificationManager.notify第一个参数ID去控制,如果,发送多次ID相同只显示一个,不同则显示多个。 那对于第一种情况只要每次发送的ID不同就可以了。对于第二种其实就是发送同一个ID,在显示一个条数就可以了。Notification.Number直接设置就会在图标上显示相应的数字。

  到现在为止基本上可以实现了前面的两种想法,但具体细节上还是有问题。我的想法通知一般都是定时触发,或是由某种事件引发(比如短信,我还不会难过),还有下载进度条(也不会,上网查找时有人提到了)。我测试的时候是BroadcastReceiver进行定时触发的,我看的例子是有两个Activity,我也就跟着用两个Activity了。一个用来进行设置,另一个用来显示通知的信息。大概流程是Activity设置时间---->BroadcastReceiver到达时间---->主Activity创建、发送通知---->点击通知---->显示Activity显示通知内容,删除通知】。在设置完时间后就可以关闭【主Activity】,在第三部时发送完之后将直接关闭。但我测试的时候,如果间隔时间设置的特别短,屏幕将出现晃动。查找后得知BroadcastReceiver生命周期非常短,不要做耗时操作,但发送通知应该没有问题。最后,流程修改为【主Activity设置时间---->BroadcastReceiver到达时间,创建、发送通知---->点击通知---->显示Activity显示通知内容,删除通知】。在BroadcastReceiver中通过Context参数获取NotificationManager(当时我花了好多时间才获取到它尴尬)。

  在费话完大概流程后,说一下我遇到的问题。一、在点击通知后,Notification.Number没清零。二、多通知时的通知内容通过Intent的参数进行传递,但显示的参数内容变成相同的,导致无法删除通知。

   那先说一下第一个问题,我在使用【主Activity创建、发送通知】时通过建立静态字段,使两个Activity访问同一个变量。创建时加1,在【显示Activity】中进行清0,这个时候是好使的,但使用【BroadcastReceiver到达时间,创建、发送通知】时,Activity访问的静态字段始终不是同一个值。最后,没有办法通过显示Activity】向BroadcastReceiver发送Intent的参数进行清0。

  第二个问题主要是由于我想在收到通知后,点击每一条通知时,显示每一条通知的详细信息,并把通知删除。但在收到多条通知后,点击的每一条通知的信息都相同。并且只有最后一条通知可以删除,其它的都删除不掉。后来我上网查找到一种简单删除通知的方法,设置Notification.flags属性为Notification.FLAG_AUTO_CANCEL就可以在点击通知后自动删除。这个要比多数介绍的NotificationManager.cancel方法方便很多。到现在为止,Intent传的参数问题还是没有解决,最后在次上网查找终于发现原因出在PendingIntent上。PendingIntent.getActivity共有四个参数,问题主要出在第二个参数和第四个参数。个人理解第二个参数requestCode如果每次不是相同值,那第四个参数没有什么意义,将创建多个Intent保存传递的参数信息。如果相同,将保留一个Intent,根据第四个参数确认怎么样保留参数信息。

  最后总结一下,

1、NotificationManager.notify第一个参数ID控制,是否生成多个通知(Intent中的内容不管)。

2、PendingIntent.getActivity第二个参数控制,Intent是否会保留多个参数信息。

3、Notification.Number可以设置收到的通知条数。

4、设置Notification.flags属性为Notification.FLAG_AUTO_CANCEL可以自动删除。

  

  第一次写博文,希望能记录下自己学习Android的经历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值