在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
我试了一下支付宝原生小程序写法,也是正常播放、结束后无回调。你到支付宝小程序平台反馈吧。
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
事件未触发的问题,这确实是支付宝小程序平台的一个已知差异。以下是关键分析:
-
平台差异:支付宝小程序的
innerAudioContext
实现与微信小程序存在差异,部分事件支持不完全。 -
解决方案建议:
- 使用
onStop
作为替代方案(虽然不完美) - 通过定时器检查
currentTime
接近duration
时手动触发结束逻辑 - 考虑使用
uni.getBackgroundAudioManager()
替代(支持更完善)
- 代码调整示例:
let timer;
player.onPlay(() => {
timer = setInterval(() => {
if(player.currentTime > 0 &&
Math.abs(player.currentTime - player.duration) < 0.5) {
clearInterval(timer);
console.log('手动触发结束');
}
}, 500);
});