收藏
回答

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

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

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



最后一次编辑于  2018-12-05
回答关注问题邀请回答
收藏

6 个回答

  • jd
    jd
    2021-01-20

    麻烦提供一下手机型号、微信号、时间点,另外,最好提供一下录音参数

    2021-01-20
    有用
    回复
  • 晒太阳
    晒太阳
    2019-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
    }


    2019-02-20
    有用 2
    回复 2
    • Lemon
      Lemon
      2019-09-05
      你这业务代码上面这段什么时候执行?按住录音的时候还是结束录音的时候?
      2019-09-05
      1
      回复
    • Ethan
      Ethan
      2021-06-30
      确实是这样的,谢谢你的讲解。已经解决了!
      2021-06-30
      回复
  • 呆呆
    呆呆
    2019-01-24

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

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

    2019-01-24
    有用 1
    回复
  • 小弗
    小弗
    2020-11-09

    const recorderManager = wx.getRecorderManager()

    recorderManager.onStop((res) => {

      console.log('监听结束', res)

      // const { tempFilePath } = res

    })

    recorderManager.onStart((res) => {

      console.log('监听开始', res)

    })

    Page({

      data: {

      },

      start_say(){

        recorderManager.start()

        // console.log('开始录音。。。')

      },

      end_say(){

        recorderManager.stop()

        // console.log('结束录音。。。')

      }

    })

    录音stop后没有触发onStop()方法,是我写错了吗

    2020-11-09
    有用
    回复
  • Zzx
    Zzx
    2019-01-23

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

    2019-01-23
    有用
    回复
  • 是小白啊
    是小白啊
    2018-12-05

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

    2018-12-05
    有用
    回复 3
    • Nan
      Nan
      2019-01-02

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

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

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

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

      是的  oppovivo重灾区

      2019-04-02
      回复
登录 后发表内容