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

Android setSound无法获取文件Uri问题(Capacitor 4环境)

完整解决方案:Capacitor 4 通知频道自定义音效设置

1. 正确放置音频文件

将FinalCountdown.wav重命名为小写无特殊字符的文件名(比如finalcountdown.wav),复制到Android项目的android/app/src/main/res/raw目录下。如果raw目录不存在,手动创建一个。

2. 错误原因分析

  • assets目录路径无法被通知频道识别:Android通知频道的sound参数只支持android.resource类型的Uri,不支持assets目录的文件路径。
  • 用File判断android.resource Uri的存在性无效:File类只能访问设备文件系统的路径,无法读取Android资源目录的内容,所以那个判断逻辑会一直返回文件不存在。
  • AssetManager读取失败:res/raw目录的文件不属于assets目录,AssetManager只能访问src/main/assets下的文件,所以找不到。
  • 错误的Uri拼接:$soundRawId是无效写法,必须使用资源ID对应的字符串形式。

3. 完整实现代码

在Android原生代码中(比如Capacitor插件类或者Notification相关的服务类),使用以下代码设置通知频道音效:

import android.content.Context;
import android.media.AudioAttributes;
import android.net.Uri;
import android.os.Build;
import android.app.NotificationChannel;
import android.app.NotificationManager;

// 初始化通知频道并设置音效
public void createNotificationChannel(Context context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        String channelId = "your_channel_id"; // 替换为你的频道ID
        CharSequence channelName = "Your Channel Name"; // 替换为你的频道名称
        int importance = NotificationManager.IMPORTANCE_DEFAULT;
        
        // 创建音频属性
        AudioAttributes audioAttributes = new AudioAttributes.Builder()
                .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
                .setUsage(AudioAttributes.USAGE_NOTIFICATION)
                .build();
        
        // 获取音效资源Uri,二选一即可
        Uri soundUri = Uri.parse("android.resource://" + context.getPackageName() + "/" + R.raw.finalcountdown);
        // Uri soundUri = Uri.fromResource(context, R.raw.finalcountdown);
        
        NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
        channel.setSound(soundUri, audioAttributes);
        
        // 注册频道
        NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
        notificationManager.createNotificationChannel(channel);
    }
}

4. 排查要点

  • 确认音频格式:Android通知音效支持WAV、MP3等格式,建议使用采样率为44.1kHz或22kHz的WAV文件,避免过高采样率导致无法播放。
  • 检查通知权限:确保应用已获取POST_NOTIFICATIONS权限(Android 13+),且设备通知设置中该频道的音效未被静音。
  • 资源ID正确性:确保R.raw.finalcountdown存在,无拼写错误。若Android Studio提示找不到R类,尝试同步项目(File -> Sync Project with Gradle Files)。

内容的提问来源于stack exchange,提问作者Mad Eddie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 11:31:02