录音结束不能触发onStop()事件
发布于 6 年前 作者 jinjun 4771 次浏览 来自 问答

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

4 回复

录音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
}

__
__

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

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

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

回到顶部