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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:03