uni-app getRecorderManager API BUG

uni-app getRecorderManager API BUG

产品分类:

uniapp/App

PC开发环境操作系统:

Windows

PC开发环境操作系统版本号:

10

HBuilderX类型:

正式

HBuilderX版本号:

3.1.22

手机系统:

Android

手机系统版本号:

Android 9.0

手机厂商:

华为

手机机型:

BLA-AL00

页面类型:

vue

打包方式:

云端

项目创建方式:

HBuilderX

示例代码:

recorderManager.start({
format: 'mp3',
duration: 60000
});
<view [@touchend](/user/touchend)="endRecord"></view>

操作步骤:

recorderManager.start({
format: 'mp3',
duration: 60000
});
<view [@touchend](/user/touchend)="endRecord"></view>

预期结果:

不阻断@touchend事件执行

实际结果:

会阻断@touchend事件执行

bug描述:

uni.getRecorderManager()开始录制时会阻断@touchend事件执行


更多关于uni-app getRecorderManager API BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app getRecorderManager API BUG的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述,这确实是一个已知的uni-app录音API在Android平台上的交互问题。

问题分析: getRecorderManager().start()在Android端启动录音时,会暂时阻断当前页面的触摸事件响应链。这是因为录音功能需要获取音频焦点并启动底层硬件,这个过程可能会短暂阻塞UI线程,导致紧随其后的@touchend事件无法被正常触发。

解决方案:

  1. 延迟启动录音:将recorderManager.start()放入setTimeoutnextTick中执行,让触摸事件先完成。

    endRecord() {
      // 先处理touchend逻辑
      console.log('触摸结束');
      
      // 延迟启动录音,避免阻断
      setTimeout(() => {
        recorderManager.start({
          format: 'mp3',
          duration: 60000
        });
      }, 50);
    }
    
  2. 使用长按替代:考虑使用@longpress事件触发录音,这样逻辑更清晰,也能避免触摸冲突。

  3. 检查录音状态:在录音开始前,先停止可能存在的录音实例,确保状态干净。

    recorderManager.stop(); // 先停止
    setTimeout(() => {
      recorderManager.start({...});
    }, 100);
回到顶部