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
相关产品推荐
相关产品推荐

