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

Ionic Native Audio play函数completeCallback使用及回调失效问题

解决Native Audio completeCallback不触发的问题

我之前在实现音频连播需求时也碰到过完全一样的问题,咱们一步步来排查和修复:

1. 先确认音频资源已正确预加载

很多时候回调不触发是因为音频还没完成加载就调用了play,导致播放逻辑异常。一定要确保在调用play前,音频已经通过preload或load方法完成加载,比如:

// 先预加载音频资源
this.nativeAudio.preload('sound', 'path/to/your/sound.mp3')
  .then(() => {
    console.log('音频加载完成');
    // 加载成功后再调用play
    this.nativeAudio.play('sound', () => {
      console.log('播放完成!');
      // 在这里播放下一段音频
      this.playNextAudio();
    });
  })
  .catch(err => console.error('音频加载失败:', err));

2. 检查API参数格式是否匹配版本

有些Native Audio的版本中,play方法的回调并不是直接作为第二个参数传入,而是需要放在配置对象里。如果你的版本是这种情况,要改成:

this.nativeAudio.play('sound', {
  completeCallback: () => {
    console.log('播放完成!');
    this.playNextAudio();
  }
});

3. 排查音频文件本身的问题

如果音频文件损坏、时长为0秒,或者格式不被当前平台支持,播放会瞬间结束,也可能导致回调不触发。可以先单独测试音频文件是否能正常播放,或者换一个已知正常的音频文件试试。

4. 平台特定的注意事项

  • iOS: 确保你的App已经获得了音频播放权限,并且没有被系统静音或后台限制。
  • Android: 检查音频焦点是否被其他应用抢占,或者是否在Manifest中配置了正确的音频权限。

最后,把连播的逻辑封装成一个方法会更清晰:

async function playAudioSequence(audioIds) {
  if (audioIds.length === 0) return;
  
  const currentId = audioIds.shift();
  await this.nativeAudio.preload(currentId, `path/to/${currentId}.mp3`);
  
  this.nativeAudio.play(currentId, () => {
    console.log(`${currentId} 播放完成`);
    // 递归播放下一段
    this.playAudioSequence(audioIds);
  });
}

// 使用方式:传入音频ID数组
this.playAudioSequence(['sound1', 'sound2', 'sound3']);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:26:35