bindtouchstart的时候开始录音,bindtouchend停止录音,但是如果点一下就松开,进入了bindtouchend对应的方法,也调用了recorderManager.stop()方法,但是却不执行recorderManager.stop()并且未进入onstop()回调。如果按的时间长一点,就可以正常结束录音并进入onstop()回调。
框架类型 | 问题类型 | API/组件名称 | 终端类型 | 微信版本 | 基础库版本 |
---|---|---|---|---|---|
小程序 | Bug | recorderManager.stop() | 客户端 | 所有 | 2.4.1 |
6 个回答
麻烦提供一下手机型号、微信号、时间点,另外,最好提供一下录音参数
录音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了,模拟器上就三四下就不触发了。。。
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()方法,是我写错了吗
会不会出现这个问题?我们线上小程序时间到了600秒会自动消失,怀疑没调onstop
提供下代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。
同遇到这个问题,借楼问一下解决了吗?
有客户反应部分vivo、oppo手机会这样,偶然模拟器也不行了. 删除缓存后又可以,怀疑会不会是权限等原因
是的 oppovivo重灾区