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

使用react-native-track-player无法播放音频,报android-io-file-not-found错误求助

解决react-native-track-player的android-io-file-not-found错误

针对你遇到的传入有效HTTP音频链接却触发文件找不到的问题,以下是几个针对性的排查和解决步骤:

1. 开启Android明文流量权限

Android 9(API级别28)及以上默认禁止明文HTTP流量,你的链接是HTTP协议,这大概率是核心问题:

  • 打开android/app/src/main/AndroidManifest.xml
  • 在<application>标签中添加android:usesCleartextTraffic="true",确保标签格式如下:
    <application
      ...
      android:usesCleartextTraffic="true">
      ...
    </application>
    
  • 同时确认文件中已声明网络权限:
    <uses-permission android:name="android.permission.INTERNET" />
    

2. 验证音频链接的设备可访问性

即使你在电脑上能打开链接,Android设备可能因为网络环境(比如代理、地区限制)无法访问:

  • 在测试设备的浏览器中直接打开该音频链接,确认能正常播放
  • 用curl命令检查链接响应:
    curl -I http://music.wufazhuce.com/FkX6nZfSWVRRGacxHWGSZ2-SpjtP
    
    确保返回的Content-Type是音频类型(比如audio/mpeg),且HTTP状态码为200。

3. 优化初始化逻辑,避免重复操作

原代码中组件挂载时和播放时可能重复调用setup,导致轨道状态混乱:

  • 将url加入useEffect的依赖数组,确保URL变化时重新初始化轨道:
    useEffect(() => {
      setup();
    }, [url]); // 依赖url变化触发重新设置
    
  • 简化togglePlayback逻辑,避免重复初始化:
    async function togglePlayback() {
      try {
        const state = await TrackPlayer.getPlaybackState();
        if (state === TrackPlayer.STATE_NONE) {
          await setup();
          await TrackPlayer.play();
          setIconName('pause-circle');
        } else if (state === TrackPlayer.STATE_PLAYING) {
          await TrackPlayer.pause();
          setIconName('play-circle');
        } else {
          await TrackPlayer.play();
          setIconName('pause-circle');
        }
      } catch (err) {
        console.error('Playback error:', err);
      }
    }
    

4. 检查TrackPlayer版本与配置

不同版本的react-native-track-player对音频源的处理可能有差异:

  • 确保使用稳定版本(比如v3.x或v4.x),避免测试版
  • 确认Android项目中已按照官方要求配置音频服务类

5. 增加错误捕获,定位详细问题

在关键逻辑中添加try-catch,打印完整错误信息:

async function setup() {
  try {
    await TrackPlayer.setupPlayer({});
    await TrackPlayer.reset();
    console.log('Attempting to add track with URL:', url);
    await TrackPlayer.add({
      id: 'trackId',
      url: url,
      title: 'Example Track',
      artist: 'Example Artist',
    });
  } catch (error) {
    console.error('Setup failed with details:', JSON.stringify(error));
  }
}

内容的提问来源于stack exchange,提问作者Sita Tan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:10:29