Android开发学习之通知
Posted 哈喽喔德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发学习之通知相关的知识,希望对你有一定的参考价值。
(学习参考书:第一行代码第2版)
一、创建通知
通知(Notification)是android系统中的特色功能。当程序希望向用户发出提示信息,而程序又不在前台运行时,就可以借助通知实现。通知的用法较为灵活,既可以在活动中创建也可以在广播接收器、服务里创建。相比于广播接收器和服务,活动中创建的情况较少。无论在哪里创建,整体步骤相同:
- 首先需要一个NotificationManager来对通知进行管理,可以调用Context的
getSystemService()
方法获取。该方法可以通过Android系统级服务的句柄,返回相应对象。该方法接收一个字符串参数用于确定获取系统的哪一个服务。传入Context.NOTIFICATION_SERVICE
即可 - 判断Android系统版本,因为在Android8.0引入了通知渠道,如果在8.0以上版本实现通知,需要创建一个NotificationChannel对象。使用NotificationChannel的构造方法创建时,需要传入三个参数:(1)唯一识别的id(2)对象名字(3)通知重要程度(如下):
IMPORTANCE_NONE关闭通知
IMPORTANCE_MIN开启通知,不会弹出,但没有提示音,状态栏中无显示
IMPORTANCE_LOW开启通知,不会弾出,不发出提示音,状态栏中显示
IMPORTANCE_DEFAULT开启通知知,不会弹出,发出提示音,状态栏中显示
IMPORTANCE_HIGH开启通知知,会弹出,发出提示音,状态栏中显示
-
然后让NotificationManager对象调用
manager.createNotificationChannel()
方法,传入创建好的NotificationChannel对象 -
使用NotificationCompat类的Builder构造器来创建Notification对象传入两个参数:(1)context(2)NotificationChannel对象的id;在最终的build()方法之前连缀多个设置方法来创建一个丰富的Notification对象
setContentTitle() 指定通知的标题
setContentText() 指定通知的正文内容
setWhen() 指定通知被创建的时间,以毫秒为单位,下拉状态栏,指定时间会显示在相应通知上。
setSmallIcon() 设置通知的小图标,显示在状态栏上。(只能使用纯alpha图层设置)
setLargeIcon() 设置通知的大图标,即下拉通知栏显示
setColor()设置小图标的颜色
setContentIntent()设置点击通知后的跳转意图
setAutoCancel()设置点击通知后自动清除通知
- 调用NotificationManager的
notify()
方法就可以让通知显示。notify()接收两个参数,第一个参数是id,要保证为每个通知指定的id是不同的;第二个参数是Notification对象,即将创建好的对象传入。
完整代码如下:
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel notificationChannel = new NotificationChannel("id1", "name", NotificationManager.IMPORTANCE_HIGH);
if (manager != null) {
manager.createNotificationChannel(notificationChannel);
}
}
Notification notification = new NotificationCompat.Builder(this, "id1")
.setContentTitle()
.setContentText()
.setWhen()
.setSmallIcon()
.setLargeIcon()
.build();
manager.notify(1,notification);
二、通知的点击事件
要想实现通知的点击效果,还需要在代码中进行相应的设置,需要使用到PendingIntent。它与Intent类似,都可以指明某一个意图,都可以用于启动活动、启动服务以及发送广播。不同的是,Intent更加倾向于去立即执行某个动作,PendingIntent更加倾向于在某个合适的时机去执行某个动作。可以将PendingIntent理解为延迟执行的Intent。
PendingIntent提供了几个静态方法用于获取PendingIntent的实例,可以根据需求选择:
getActivity()、getBroadcast()、getService()
这几个方法接收参数相同,第一个参数是Context;第二个一般传入0;第三个是Intent对象,通过这个对象构建出PendingIntent的意图;第四个用于确定PendingIntent的行为,通常也传入0。
要使用PendingIntent意图,则在构造器中添加方法setContentIntent()
,参数传入一个PendingIntent对象。
如果要实现点击后通知的消失,有两种方法。其一是在构造器中调用setAutoCancel()方法;其二是调用NotificationManager的cancel()方法,传入创建时指定的id。
三、通知进阶技巧
NotificationCompat.Builder中提供了非常丰富的API来让我们创建多样的通知效果。常用的进阶API有:
setSound()
在通知发出的时候播放一段音频,接收一个Uri参数,所以在指定音频文件时要先获取音频文件对应的URI
setVibrate()
在通知到来时让手机振动,参数是一个长整型数组,用于设置手机静止和振动的时长,以毫秒为单位。下标0表示静止时长、下标为1表示振动时长、下标为2又表示静止时长、下标为3又表示振动时长,以此类推。振动需要在AndroidManifest加入声明:
<uses-permission android:name=”android.permission.VIBRATE”>
setDefaults()
默认通知效果,会根据当前手机环境播放铃声和振动
setStyle()
允许构建富文本的通知内容。该方法接收一个NotificationCompat.Style参数,即使用该参数构建富文本信息。
以上是关于Android开发学习之通知的主要内容,如果未能解决你的问题,请参考以下文章