在uni-app支付宝小程序中uni.createInnerAudioContext() 播放结束没有触发onEnded

在uni-app支付宝小程序中uni.createInnerAudioContext() 播放结束没有触发onEnded

开发环境 版本号 项目创建方式
Windows win10 CLI
3.9.41
2.9.80
^2.0.2-3071120230427001
### 示例代码:

```javascript
const player = uni.createInnerAudioContext()  

// 设置播放地址开始播放  
player.src = 'https://dj-cdn.g2work.com//agent/tts/7961601303971908301/0/e5ff941f.mp3'  
player.onCanplay(res => {  
  let musicTime = Math.floor(player.duration)  
  console.log('视频时长==>', musicTime, player.duration) // 这里打印的this.player.duration是0  
})  
player.onError(res => {  
  console.error('播放音频失败', res)  
})  
player.onPlay(res => {  
  console.log('播放音频成功', res)  
})  
// 监听音频播放停止  
player.onStop(res => {  
  console.log('监听音频播放停止', res)  
})  
// 监听音频自然播放结束  
player.onEnded(res => {  
  console.log('音频自然播放结束', res)  
})  
// 监听音频自然播放结束  
player.onSeeked(() => {  
  console.log('音频onSeeked')  
})  
player.onPause(res => {  
  console.log('音频被暂停', res)  
})  
player.play()

操作步骤:

  • 真机验证

预期结果:

  • 同一份代码,微信小程序可以。支付宝小程序应该也能才对

实际结果:

  • 微信小程序可以。支付宝小程序不可以

bug描述:

  • 苹果还是安卓手机都无法监听到onEnded事件

更多关于在uni-app支付宝小程序中uni.createInnerAudioContext() 播放结束没有触发onEnded的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

我试了一下支付宝原生小程序写法,也是正常播放、结束后无回调。你到支付宝小程序平台反馈吧。
Page({
onLoad(query) {
// 页面加载
console.info(Page onLoad with query: ${JSON.stringify(query)});
},
onReady() {
// 页面加载完成

let player  
 player = my.createInnerAudioContext()  

// 设置播放地址开始播放    
player.src = 'https://dj-cdn.g2work.com//agent/tts/7961601303971908301/0/e5ff941f.mp3'  
player.onCanplay(res => {  
  let musicTime = Math.floor(player.duration)  
  console.log('视频时长===>', musicTime, player.duration) // 这里打印的this.player.duration是0    
})  
player.onError(res => {  
  console.error('播放音频失败', res)  
})  
player.onPlay(res => {  
  console.log('播放音频成功', res)  
})  
// 监听音频播放停止    
player.onStop(res => {  
  console.log('监听音频播放停止', res)  
})  
// 监听音频自然播放结束    
player.onEnded(res => {  
  console.log('音频自然播放结束', res)  
})  
// 监听音频自然播放结束    
player.onSeeked(() => {  
  console.log('音频onSeeked')  
})  
player.onPause(res => {  
  console.log('音频被暂停', res)  
})  

player.play()  

},

});

更多关于在uni-app支付宝小程序中uni.createInnerAudioContext() 播放结束没有触发onEnded的实战教程也可以访问 https://www.itying.com/category-93-b0.html


感谢,支付宝那边反馈的是音频不兼容,已处理修复了

回复 丿白开水: ok ,如果有问题可以继续反馈

回复 丿白开水: 如何修复的?我也遇到同样的问题了

回复 5***@qq.com: 使用格式工厂转一下格式试试,我测试作者白开水的音频,和 uniapp 官网的音频表现不一样,官网的音频是有正常结束的 log 日志的。

根据问题描述,在支付宝小程序中onEnded事件未触发的问题,这确实是支付宝小程序平台的一个已知差异。以下是关键分析:

  1. 平台差异:支付宝小程序的innerAudioContext实现与微信小程序存在差异,部分事件支持不完全。

  2. 解决方案建议

  • 使用onStop作为替代方案(虽然不完美)
  • 通过定时器检查currentTime接近duration时手动触发结束逻辑
  • 考虑使用uni.getBackgroundAudioManager()替代(支持更完善)
  1. 代码调整示例
let timer;
player.onPlay(() => {
  timer = setInterval(() => {
    if(player.currentTime > 0 && 
       Math.abs(player.currentTime - player.duration) < 0.5) {
      clearInterval(timer);
      console.log('手动触发结束');
    }
  }, 500);
});
回到顶部