智能客服系统架构解析与电商行业应用实践
2026/7/26 10:30:32
在 Andfroid 8.0 之前,用户对通知的处理,是没办法对通知消息进行区分,要么接收所有信息,要么屏蔽所有新信息,不能只接受用户想要的信息,不能细粒度区分。
Android 8.0 之后,引入了通知渠道解决了该痛点,每条通知属于一个通知渠道,即对通知做了细粒度的区分,例如可分为新闻通知、私信通知。
使用方式:
// 1. 获取系统通知管理服务// Context.NOTIFICATION_SERVICE 是系统服务的标识,返回 NotificationManager 对象// as NotificationManager 进行类型转换valmanager=getSystemService(Context.NOTIFICATION_SERVICE)asNotificationManager// 2. 通知渠道仅在 Android 8.0 (API 26) 及以上版本需要创建,低版本会自动忽略if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.O){// 创建通知渠道对象// 参数1 channelId: 渠道的唯一标识符,后续发送通知时需要匹配此 ID(如 "news")// 参数2 channelName: 渠道名称,显示在系统设置中,用户可见// 参数3 importance: 通知的重要程度,决定通知的行为(如是否弹出横幅、是否有提示音等)valchannel=NotificationChannel("news","新闻",IMPORTANCE_HIGH)// 将渠道对象注册到系统。一旦创建,渠道的重要程度等属性将无法修改(除非卸载应用重装)manager.createNotificationChannel(channel)}// 创建点击通知时触发的 Intent(此处指定跳转到 MainActivity)// flags = FLAG_ACTIVITY_NEW_TASK: 如果目标 Activity 不在当前任务栈,则创建新任务启动valintent=Intent(this,MainActivity::class.java).apply{flags=FLAG_ACTIVITY_NEW_TASK}// 将 Intent 包装为 PendingIntent,用于在通知被点击时以应用原有权限执行跳转// 参数1 context: 上下文// 参数2 requestCode: 请求码,用于区分不同 PendingIntent,通常设为 0// 参数3 intent: 要执行的动作// 参数4 flags: 控制 PendingIntent 的行为// FLAG_IMMUTABLE: 表示创建的 PendingIntent 不可变(Android 6.0+ 推荐)// 如需可变(如添加额外数据)可用 FLAG_UPDATE_CURRENTvalpendingIntent=PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_IMMUTABLE)// 3. 使用 NotificationCompat.Builder 构建通知(兼容低版本)// 参数1 context: 上下文// 参数2 channelId: 必须与上面创建的渠道 ID 一致("news"),Android 8.0+ 会路由到对应渠道valnotification=NotificationCompat.Builder(this,"news").setSmallIcon(R.drawable.ic_notify)// 必需:设置通知的小图标(状态栏显示).setContentTitle("标题")// 通知的标题.setContentText("内容")// 通知的内容文本.setContentIntent(pendingIntent)// 设置点击通知时执行的 PendingIntent.setAutoCancel(true)// 用户点击通知后,自动从通知栏移除.build()// 最终构建出 Notification 对象// 4. 发送通知// 参数1 id: 通知的唯一标识(正整数)。相同 id 会覆盖之前的通知,不同 id 会叠加显示// 参数2 notification: 要发送的通知对象manager.notify(1,notification)