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)
相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui