uni-app android 平台下 onTimeUpdate 事件一定几率不回调
uni-app android 平台下 onTimeUpdate 事件一定几率不回调
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 12.0.1 | HBuilderX |
产品分类:uniapp/App
PC开发环境操作系统:Mac
PC开发环境操作系统版本号:12.0.1
HBuilderX类型:正式
HBuilderX版本号:3.3.0
手机系统:Android
手机系统版本号:Android 9.0
手机厂商:小米
手机机型:mi6
页面类型:vue
vue版本:vue2
打包方式:云端
项目创建方式:HBuilderX
### 操作步骤:
频繁调用 play stop 切换src 有一定几率出现音乐开始播放 但是回调事件不触发
### 预期结果:
回调事件正常触发
### 实际结果:
未能触发
### bug描述:
背景音频播放 onTimeUpdate 事件不回调
在某些情况下,如频繁切换暂停播放,或频繁更换音频的src,会出现音频开始正常播放了,但是回调事件不触发,只有android有这个问题,ios和小程序都没问题,andoird下小米6,vivo x60 pro +经测试都存在,应该是andoird平台所有机型都有问题,不触发问题出现后,如果重新设置src并调用play方法播放,事件触发会恢复正常
更多关于uni-app android 平台下 onTimeUpdate 事件一定几率不回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
用示例代码hello uni-app能出现你的问题吗?
请提供简单、可稳定复现、能直接运行的示例(上传附件),方便我们快速排查问题哦。
【bug优先处理规则】https://ask.dcloud.net.cn/article/38139
更多关于uni-app android 平台下 onTimeUpdate 事件一定几率不回调的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用背景音频管理器时发现,一旦触发onWaiting之后,不再返回onTimeUpdate回调,但背景音频还在播放,播放结束时onEnd还能正常触发。
具体的描述是这样的
暂时用一个临时办法解决了 就是在onwaitting回调中调用一下play方法会重新激活回调函数
// #ifdef APP-PLUS
// android 有bug 回调onwaitting之后会卡住停止调用onTimeUpdate 暂时用这个方法解决一下
setTimeout(()=>{
this.audioCtx.play()
},1000)
// #endif
这是一个已知的Android平台兼容性问题,主要与底层音频播放器的实现机制有关。当频繁切换src或调用play/stop时,Android系统的MediaPlayer可能无法稳定触发时间更新事件。
临时解决方案:
-
避免频繁操作:在切换音频源或控制播放状态时,增加延迟或确保前一次操作完成后再执行下一次。例如,在切换
src前先stop,并等待一小段时间(如100ms)再设置新src并播放。 -
使用定时器替代:如果
onTimeUpdate仅用于获取播放进度,可改用setInterval定时查询currentTime。但需注意性能消耗,并在暂停时清除定时器。 -
重置音频实例:检测到事件不触发时,销毁当前音频实例并重新创建。可通过
uni.createInnerAudioContext()新建实例,替换原有实例。 -
降级到WebView音频:对于复杂场景,可考虑使用
<audio>标签嵌入WebView播放,但会失去原生音频能力。
代码示例(方案1延迟操作):
let audio = uni.createInnerAudioContext();
let isSwitching = false;
async function switchSrc(newSrc) {
if (isSwitching) return;
isSwitching = true;
audio.stop();
await delay(100); // 自定义延迟函数
audio.src = newSrc;
audio.play();
isSwitching = false;
}

