Android 学习系列之 Notification

通知简介:

通知(Notification)是Android系统中比较有特色的一个功能, 当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现。发出一条通知后,手机最上方的状态栏中会显示一个通知的图标,下拉状态栏后可以看到通知的详细内容。Android的通知功能获得了大量用户的认可和喜爱, 就连iOS系统也在5.0版本之后加入了类似的功能。

通知的基本用法

了解了通知的基本概念,下面我们就来看一下通知的使用方法吧。通知的用法还是比较灵活的,既可以在活动里创建, 也可以在广播接收器里创建, 当然还可以在下一章中我们即将学习的服务里创建。相比于广播接收器和服务,在活动里创建通知的场景还是比较少的, 因为一般只有当程序进入到后台的时候我们才需要使用通知。

创建通知的详细步骤

1.首先需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法获取到getSystemService()方法接收一个字符串参数用千确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE即可。因此,获取NotificationManager的实例就可以写成:

NotificationManager manager= (NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);

2.使用一个Builder构造器来创建Notification对象,但问题在于,几乎Android系统的每一个版本都会对通知这部分功能进行或多或少的修改,API不稳定性问题在通知上面突显得尤其严重。那么该如何解决这个问题呢?其实解决方案我们之前已经见过好几回了,就是使用support库中提供的兼容API。support-v4库中提供了一个NotificationCompat类,使用这个类的构造器来创建Notification对象,就可以保证我们的程序在所有Android系统版本上都能正常工作了,代码如下所示:

Notification notification= new NotificationCompat.Builder(context).build();

3.当然,上述代码只是创建了一个空的Notification对象,并没有什么实际作用,我们可以在最终的build()方法之前连缀任意多的设置方法来创建一个丰富的Notification对象,先来看一些最基本的设置:

Notification notification= new NotificationCompat.Builder(context)
//用千指定通知的标题内容, 下拉系统状态栏就可以看到这部分内容。
. setContentTitle("This is content title")
//用于指定通知的正文内容,同样下拉系统状态栏就可以看到这部分内容。
.setContentText("This is content text")
//用千指定通知被创建的时间,以毫秒为单位,当下拉系统状态栏时,这里指定的时间会显示在相应的通知上。
. setWhen (System. currentTimeMil lis ())
//用于设置通知的小图标,注意只能使用纯alpha图层的图片进行设置,小图标会显示在系统状态栏上
.setSmallicon(R.drawable.small_icon)
//用于设置通知的大图标, 当下拉系统状态
栏时, 就可以看到设置的大图标了。
.setLargeicon(BitmapFactory.decodeResource(getResources(),R.drawable.large_icon))
. build ();

4.以上工作都完成之后, 只需要调用NotificationManager的notify()方法就可以让通知显示出来了。notify()方法接收两个参数,第一个参数是过,要保证为每个通知所指定的id都是不同的。第二个参数则是Notification对象,这里直接将我们刚刚创建好的Notification对象传入即可。因此, 显示一个通知就可以写成:

manager. notify (1, notification) ;

通知的可点击

要想实现通知的点击效果,我们还需要在代砃中进行相应的设置,这就涉及了一个新的概念:Pendinglntent。

Pendinglntent从名字上看起来就和Intent有些类似, 它们之间也确实存在着不少共同点。比如它们都可以去指明某一个“意图” ,都可以用于启动活动、启动服务以及发送广播等。不同的是,Intent更加倾向于去立即执行某个动作, 而Pendinglntent更加倾向千在某个合适的时机去执行某个动作。所以, 也可以把Pendinglntent简单地理解为延迟执行的Intent 。

Pendinglntent的用法同样很简单,它主要提供了儿个静态方法用于获取Pendinglntent的实例,可以根据需求来选择是使用getActivity()方法、getBroadcast()方法, 还是getService()方法。这几个方法所接收的参数都是相同的,第一个参数依旧是Context, 不用多做解释。第二个参数一般用不到,通常都是传入0即可。第三个参数是一个Intent对象,我们可以通过这个对象构建出Pendinglntent的”意图"。第四个参数用于确定Pendinglntent的行为,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT这4种值可选,每种值的具体含义你可以查看文档,通常情况下这个参数传入0就可以了。

对Pendinglntent有了一定的了解后, 我们再回过头来看一下NotificationCompat.Builder。这个构造器还可以再连缀一个setContentintent()方法, 接收的参数正是一个Pending Intent对象。因此,这里就可以通过Pendinglntent构建出一个延迟执行的”意图”, 当用户点击这条通知时就会执行相应的逻辑。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值