问题描述
[问题描述:尽可能简洁清晰地把问题描述清楚]
recorderManager调用录音时,如果授权处于授权弹窗过程中调用stop方法录制的会是杂音,应用重启后一切正常
复现步骤
[复现问题的步骤]
场景:用户点击button触发录制,这个时候弹窗授权弹窗点击同意或者允许都会触发button的touchend事件。这个时候回调用stop方法,这段时间内再次录制音频都是杂音。重启app后一切正常
[或者可以直接贴源代码]
预期结果
[使用简洁清晰的语言描述你希望生效的预期结果]
预期是类似于微信发送语音的效果。目前在授权过程中导致recorderManager有一些小问题
实际结果
[这里请贴上你的报错截图或文字]
录制
async requestAndroidPermission(permisionID,type) {
let self=this;
var result = await permision.requestAndroidPermission(permisionID)
if (result == 1) {
result=1;
} else if (result == 0) {
uni.removeStorageSync('first_record');
if(type!='check'){
uni.showModal({
content: "系统麦克风已关闭",
confirmText: "确定",
showCancel: false,
success: function(res) {
}
})
}
} else {
uni.removeStorageSync('first_record');
if(type!='check'){
uni.showModal({
content: "需要麦克风权限",
confirmText: "设置",
success: function(res) {
if (res.confirm) {
permision.gotoAppPermissionSetting();
}
}
})
}
}
console.log('************语音权限'+result)
return result
},
async startRecord() { //开始录音
let status = await this.requestAndroidPermission('android.permission.RECORD_AUDIO');
console.log(status);
if (status !== 1) {
return;
}
//不是第一次的情况
let result=uni.getStorageSync('first_record');
console.log('**************'+result)
if(result){
this.$refs.popup.open();
this.audio_tip='松开发送';
}
recorderManager.start({
duration:60000,
format: 'mp3'
});
},
录制结束
recordEnd(e){
let info=uni.getSystemInfoSync();
if(info.platform=='ios'){
this.audio_tip='按住说话'
this.$refs.popup.close();
recorderManager.stop();
}else{
//是否是第一次进来
let result=uni.getStorageSync('first_record');
if(result){
this.audio_tip='按住说话'
this.$refs.popup.close();
recorderManager.stop();
}
}
},
系统信息:
- 发行平台: [mac]
- 操作系统 [Android 7.1.1]
- HBuilderX版本 [2.7.14.20200618]
- uni-app版本 [如使用Vue-cli创建/运行项目,则提供
npm run info
的运行结果] - 设备信息 [如 iPhone8 Plus]
2条答案
按热度按时间0mkxixxg1#
麻烦将闪退问题和杂音问题整理出一个demo,我们这边测试一下,并详细描述可复现的手机的详细信息。
o2rvlv0m2#
官方的demo也可以重现,只要把录音的动作改成touchstar录制,touchend停止,问题的点就在于如果是第一次使用recorderManager录制,会弹出授权。这个时候如果调用了recorderManager.stop,就能出现这个问题