You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin本地通知不显示问题排查求助

Android 本地通知不显示的排查与修复

核心问题排查点

1. API 33+ 需动态申请通知权限

仅在AndroidManifest.xml中声明POST_NOTIFICATIONS权限是不够的,Android 13(API 33)及以上版本要求动态申请该权限。如果未获得授权,系统会直接拦截通知发送请求。

添加动态权限申请逻辑:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    val permission = Manifest.permission.POST_NOTIFICATIONS
    if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(arrayOf(permission), 1001)
    }
}

建议在onCreate中执行权限检查,确保发送通知前已获得授权。

2. 通知渠道配置不完整

创建通知渠道时,必须指定渠道名称、描述、足够的重要性级别。如果重要性设置过低(如IMPORTANCE_LOW及以下),Android 13+ 可能不会展示通知弹窗。

正确的渠道创建代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
        "104", 
        "测试通知渠道", 
        NotificationManager.IMPORTANCE_DEFAULT // 至少使用DEFAULT或更高级别
    ).apply {
        description = "用于展示应用测试通知"
    }
    val notificationManager = getSystemService(NotificationManager::class.java)
    notificationManager.createNotificationChannel(channel)
}

3. 通知构建缺少必要属性

Android系统强制要求通知必须设置小图标,否则通知不会显示。同时要确保NotificationCompat.Builder指定的渠道ID与创建的渠道ID完全一致。

正确的通知构建示例:

val notification = NotificationCompat.Builder(this, "104")
    .setSmallIcon(R.drawable.ic_notification) // 必须设置,不能省略
    .setContentTitle("应用启动通知")
    .setContentText("这是应用启动时的测试通知")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    .build()

// 发送通知
NotificationManagerCompat.from(this).notify(1, notification)

4. 生命周期时机问题

onStart方法执行时,可能权限还未完成申请,导致通知发送失败。建议将发送通知的逻辑放在权限申请成功之后,或者延迟到onResume中执行(确保权限已授权)。

5. 系统通知设置验证

手动检查设备的应用通知权限:进入「设置 → 应用 → 你的应用 → 通知」,确认通知权限已开启,且对应渠道的通知开关未关闭。

内容的提问来源于stack exchange,提问作者Sudo Sur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:03:32