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
相关产品推荐
相关产品推荐

