收藏
回答

录音结束不能触发onStop()事件

问题模块 框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
API和组件 小程序 Bug recorderManager.stop() 客户端 所有 2.4.1

bindtouchstart的时候开始录音,bindtouchend停止录音,但是如果点一下就松开,进入了bindtouchend对应的方法,也调用了recorderManager.stop()方法,但是却不执行recorderManager.stop()并且未进入onstop()回调。如果按的时间长一点,就可以正常结束录音并进入onstop()回调。



最后一次编辑于  2018-12-05  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

4 个回答

  • 社区技术运营专员-白柿子
    社区技术运营专员-白柿子
    2018-12-05

    提供下代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2018-12-05
    赞同
    回复 3
    • Nan
      Nan
      01-02

      同遇到这个问题,借楼问一下解决了吗?

      01-02
      回复
    • 郑栋🤔
      郑栋🤔
      03-01

      有客户反应部分vivo、oppo手机会这样,偶然模拟器也不行了. 删除缓存后又可以,怀疑会不会是权限等原因

      03-01
      回复
    • Zzx
      Zzx
      04-02回复郑栋🤔

      是的  oppovivo重灾区

      04-02
      回复
  • 呆呆
    呆呆
    01-24

    我执行recorderManager.stop()的时候有一定的概率是不会去触发recorderManager.onStop事件的,最常见的操作就是我长按

    recorderManager.start()开始录音后放开stop(),如此快速操作几遍,开发工具上大概是十几遍就不触发onStop了,模拟器上就三四下就不触发了。。。

    01-24
    赞同 1
    回复
  • 晒太阳
    晒太阳
    02-20

    录音stop失效? 寻寻 的回答 - 微信开放社区


    录音是个异步的过程  


    如果touch时间太短,当调用recordManager.stop()的时候录音的异步操作还没有开始,从代码的执行结果看,stop()操作就会被忽略。


    所以小程序内部以录音的状态来判断是否执行回调是有问题的,没有合理的处理回调任务队列


    推理猜测说完了,说说解决,大致思路就是给个自己的标志位。


    const manager = wx.getRecordManager()
     
    let isRecording = false
     
    manager.onStart(() => {
      if (!isRecording) {
        // 说明还未开始录音就执行了stop了,会被小程序丢弃
        // 因此再次执行stop
        manager.stop()
      }
    })
     
    // ---- 业务代码 ----
    function handleTouchstart () {

     isRecording = true

     manager.start() 

    }
     
    function handleTouchend () {
      manager.stop()
      isRecording = false
    }


    02-20
    赞同
    回复 1
    • Lemon
      Lemon
      09-05
      你这业务代码上面这段什么时候执行?按住录音的时候还是结束录音的时候?
      09-05
      回复
  • Zzx
    Zzx
    01-23

    会不会出现这个问题?我们线上小程序时间到了600秒会自动消失,怀疑没调onstop

    01-23
    赞同
    回复