开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第17天,点击查看活动详情
一、通知
1.用到的类和方法
(1) Context类
| getSystemService() | 接收一个字符串参数用于确定获取系统的哪个服务,这里我们传入Context.NOTIFICATION_SERVICE,获取NotificationManager |
|---|
(2) NotificationManager类
| createNotificationChannel() | 创建通知渠道 |
|---|---|
| notify() | 让通知显示出来,第一个参数是id,第二个参数是Notification对象 |
(3) NotificationChannel类
| NotificationChannel() | 构建通知渠道,第一个参数,渠道ID,第二个参数,渠道名称,第三个参数,通知的重要等级,等级从高到低有IMPORTANCE_HIGH、IMPORTANCE_DEFAULT、IMPORTANCE_LOW、IMPORTANCE_MIN这几种。 |
|---|
(4) NotificationCompat类
| NotificationCompat.builder() | 创建Notification对象,第一个参数是context,第二个参数是渠道ID。 |
|---|
(5) Notification
| setContentTitle() | 指定通知的标题内容 |
|---|---|
| setContentText() | 指定通知的正文内容 |
| setSmallIcon() | 设置通知的小图标 |
| setLargeIcon() | 设置通知的大图标 |
| setWhen() | 设置创建的时间 |
| setContentIntent() | 通过PendingIntent构建一个延迟执行的”意图“,参数为PendingIntent对象 |
| setAutoCancel() | 方法传入true,就表示点击这个通知时,通知会自动取消 |
| setStyle() | 接收一个NotificationCompat.Style参数,这个参数时用来构建具体的富文本信息的,如长文字、图片等。 |
.setStyle(NotificationCompat.BigTextStyle().bigText(".........................")
.setStyle(NotificationCompat.BigPictureStyle().bigPicture(BigmapFactory.decodeResource(resources,R.drawable.big_image)))
(6) PendingIntent
| getActivity() | 获得PendingIntent对象,第一个参数是Context,第二个参数用不到,传入0,第三个参数是一个Intent对象,第四个参数是确定PendingIntent的行为,行为有FLAG_ONE_SHOT,FLAG_NO_CREATE,FLAG_CANCEL_CURRENT和FLAG_UPDATE_CURRENT四种可选。 |
|---|
2.创建通知
步骤
(1)创建通知渠道
获取NotificationManager的实例,,由于NotificationManager类和createNotificationChannel()方法都是Android 8.0系统新增的API,因此在使用的时候要进行版本判断,接下来使用NotificationChannel类构建通知渠道,并调用NotificationManager类的createNotificationChannel()方法完成创建。
val manager=getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){
val channel=NotificationChannel("normal","Normal",NotificationManager.IMPORTANCE_DEFAULT)
manager.createNotificationChannel(channel)
}
(2)设置通知点击事件,构建Notification对象并显示通知。
val sendNotion:Button=findViewById(R.id.sendNotion)
sendNotion.setOnClickListener {
val intent= Intent(this,otherActivity::class.java)
val pi=PendingIntent.getActivity(this,0,intent,0)
val notification= NotificationCompat.Builder(this,"normal")
.setContentTitle("This is content title")
.setContentText("This is content text")
.setSmallIcon(R.drawable.small)
.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.big))
.setWhen(System.currentTimeMillis())
.setContentIntent(pi)
.setAutoCancel(true)
.build()
manager.notify(1,notification)
}