Android配置Notification Channel后Firebase通知仍用默认提示音问题求助
问题修复方案
1. 修复自定义音效Uri的构造错误
你当前构造Uri的方式有误,直接拼接applicationContext会将上下文对象直接转为带哈希值的字符串,导致系统无法正确定位到raw目录下的音频资源,正确的构造方式应该使用应用包名:
// 错误写法 val orderSoundUri = Uri.parse("android.resource://" + applicationContext + "/raw/ordernotification") // 正确写法 val orderSoundUri = Uri.parse("android.resource://${packageName}/raw/ordernotification")
这段修改要同步到Application的Channel创建逻辑和FirebaseMessagingService的代码中。
2. 处理通知Channel的缓存问题
Android 8.0及以上系统中,通知Channel一旦被创建,后续修改其声音、振动等配置都不会生效,系统会一直沿用首次创建时的配置。你需要执行以下任一操作验证:
- 完全卸载应用后重新安装
- 修改Channel的ID(比如把
"Orders"改成"Orders_v2"),触发新Channel的创建
3. 移除无效的通知配置代码
Android 8.0及以上系统所有通知的声音、振动、优先级配置都以Channel的设置为准,你在NotificationCompat.Builder中调用的setSound、setVibrate、setPriority都是无效代码,可以直接删除,避免混淆逻辑。
4. 修正AudioAttributes配置(可选)
你当前设置的AudioAttributes.USAGE_ALARM对应的是闹钟音量通道,如果你的通知属于普通消息类通知,建议改为AudioAttributes.USAGE_NOTIFICATION,匹配系统通知音量的调节逻辑:
val attributes = AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_NOTIFICATION) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build()
5. 检查资源合法性
确认res/raw目录下的音频文件命名全为小写,无特殊字符,格式为系统支持的mp3、wav等通用音频格式。
6. 适配Android 12+的PendingIntent规则
如果你的应用targetSdk版本 >= 31,需要给PendingIntent添加可变性标记,否则通知会无法正常触发:
val contentPendingIntent = PendingIntent.getActivity( applicationContext, 0, contentIntent, // Android 12+必须指定可变性标记 PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE )
内容的提问来源于stack exchange,提问作者Sai Krishna Korukanti
相关产品推荐
相关产品推荐

