Android:通知 基本使用

在 Andfroid 8.0 之前,用户对通知的处理,是没办法对通知消息进行区分,要么接收所有信息,要么屏蔽所有新信息,不能只接受用户想要的信息,不能细粒度区分。

Android 8.0 之后,引入了通知渠道,每条通知属于一个通知渠道,即对通知做了细粒度的区分,例如可分为新闻通知、私信通知。


使用方式:

  1. 获取 NotificationManager 实例,通过Context 的getSystemService(Context.NOTICIFICATION_SERVICE) 获取
  2. 声明 通知渠道
  3. 创建 Notification 对象,可以使用多样的设置方法一多样化通知
  4. 使用 NotificationManager 发送通知
kotlin 复制代码
// 1. 获取系统通知管理服务
// Context.NOTIFICATION_SERVICE 是系统服务的标识,返回 NotificationManager 对象
// as NotificationManager 进行类型转换
val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

// 2. 通知渠道仅在 Android 8.0 (API 26) 及以上版本需要创建,低版本会自动忽略
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // 创建通知渠道对象
    // 参数1 channelId: 渠道的唯一标识符,后续发送通知时需要匹配此 ID(如 "news")
    // 参数2 channelName: 渠道名称,显示在系统设置中,用户可见
    // 参数3 importance: 通知的重要程度,决定通知的行为(如是否弹出横幅、是否有提示音等)
    val channel = NotificationChannel("news", "新闻", IMPORTANCE_HIGH)
    
    // 将渠道对象注册到系统。一旦创建,渠道的重要程度等属性将无法修改(除非卸载应用重装)
    manager.createNotificationChannel(channel)
}

// 创建点击通知时触发的 Intent(此处指定跳转到 MainActivity)
// flags = FLAG_ACTIVITY_NEW_TASK: 如果目标 Activity 不在当前任务栈,则创建新任务启动
val intent = 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_CURRENT
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)

// 3. 使用 NotificationCompat.Builder 构建通知(兼容低版本)
// 参数1 context: 上下文
// 参数2 channelId: 必须与上面创建的渠道 ID 一致("news"),Android 8.0+ 会路由到对应渠道
val notification = 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)
相关推荐
Jinkxs1 小时前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
私人珍藏库1 小时前
【Android】VLLO-韩国热门手机剪辑APP
android·app·工具·软件·多功能
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第六章 Item 40 - 43)
android·开发语言·人工智能·笔记·python·学习方法
AFinalStone3 小时前
Android12 U盘插拔链路源码全解析(五):Framework层(下) StorageManagerService
android·frameworks
林九生4 小时前
【实用技巧】MySQL 绿色版一键路径更新脚本详解 —— update_path.bat 深度解析
android·数据库·mysql
故渊at5 小时前
第十三板块:Android 综合架构与未来演进 | 第三十一篇:Android 架构演进与 Fuchsia OS 的挑战
android·架构·宏内核·微内核·fuchsia·ipc 性能博弈
aqi005 小时前
一文速览 HarmonyOS 6.1.1 推出的十个新特性
android·华为·harmonyos·鸿蒙·harmony
matrixmind15 小时前
aiomysql:异步场景下的 MySQL 驱动
android·数据库·mysql·其他
随遇丿而安5 小时前
第8周:弹窗 / 提示组件全功能与弹窗优化
android
zh_xuan5 小时前
诡异Bug:输入框删除字符,却越删越多
android·bug