16.1 使用通知
- 创建通知渠道
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)
}
- 发送通知
viewBinding.sendNotice.setOnClickListener {
val intent = Intent(this, NotificationActivity::class.java)
val pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)
val notification = NotificationCompat.Builder(this, "normal")
.setContentTitle("This is content title")
.setContentText("This is content text")
.setSmallIcon(R.drawable.small)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.large))
.setContentIntent(pi) // 设置打开页面
.setAutoCancel(true) // 设置通知点击后自动取消
.build()
manager.notify(1, notification)
}
创建和发送的Channeld要保持一致,否则无法发送。
第二种取消通知栏里通知方法
class NotificationActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_notification)
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
// 取消通知,根据通知id
manager.cancel(1)
}
}
16.2 通知进阶
设置显示长文本
val notification = NotificationCompat.Builder(this, "normal")
.setContentTitle("This is content title")
// .setContentText("根据最新爆料,特斯拉计划于9月1日正式推出新款Model 3。" +
// "据悉,新款Model 3整车制造成本较上一代明显下降。为了实现成本的降低," +
// "新款Model 3采用了一体化铸造技术,减少了线束,并采用了更多的新材料。" +
// "预计新车的定价将维持在20万元人民币左右。")
.setStyle(NotificationCompat.BigTextStyle().bigText("根据最新爆料,特斯拉计划于9月1日正式推出新款Model 3。" +
"据悉,新款Model 3整车制造成本较上一代明显下降。为了实现成本的降低," +
"新款Model 3采用了一体化铸造技术,减少了线束,并采用了更多的新材料。" +
"预计新车的定价将维持在20万元人民币左右。"))
.setSmallIcon(R.drawable.small)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.large))
.setContentIntent(pi) // 设置打开页面
.setAutoCancel(true) // 设置通知点击后自动取消
.build()
设置显示大图
val notification = NotificationCompat.Builder(this, "normal")
// .setContentTitle("This is content title")
.setContentText("根据最新爆料,特斯拉计划于9月1日正式推出新款Model 3。")
// .setStyle(NotificationCompat.BigTextStyle().bigText("根据最新爆料,特斯拉计划于9月1日正式推出新款Model 3。" +
// "据悉,新款Model 3整车制造成本较上一代明显下降。为了实现成本的降低," +
// "新款Model 3采用了一体化铸造技术,减少了线束,并采用了更多的新材料。" +
// "预计新车的定价将维持在20万元人民币左右。"))
.setStyle(NotificationCompat.BigPictureStyle().bigPicture(BitmapFactory.decodeResource(resources, R.drawable.luffy_3)))
.setSmallIcon(R.drawable.small)
.setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.large))
.setContentIntent(pi) // 设置打开页面
.setAutoCancel(true) // 设置通知点击后自动取消
.build()
设置通知聚到重要等级为高,一般会从顶部弹出(具体还是看手机设置)
val channel2 = NotificationChannel("important", "Important", NotificationManager.IMPORTANCE_HIGH)
manager.createNotificationChannel(channel2)