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

4 回复

用示例代码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可能无法稳定触发时间更新事件。

临时解决方案:

  1. 避免频繁操作:在切换音频源或控制播放状态时,增加延迟或确保前一次操作完成后再执行下一次。例如,在切换src前先stop,并等待一小段时间(如100ms)再设置新src并播放。

  2. 使用定时器替代:如果onTimeUpdate仅用于获取播放进度,可改用setInterval定时查询currentTime。但需注意性能消耗,并在暂停时清除定时器。

  3. 重置音频实例:检测到事件不触发时,销毁当前音频实例并重新创建。可通过uni.createInnerAudioContext()新建实例,替换原有实例。

  4. 降级到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;
}
回到顶部