十六、Android-手机多媒体之通知

50 阅读2分钟

16.1 使用通知

  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)
        }
  1. 发送通知
        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)