uni-app recorderManager调用录音时,如果授权处于授权弹窗过程中调用stop方法录制的会是杂音

velaa5lx  于 2021-11-27  发布在  Java
关注(0)|答案(2)|浏览(975)

问题描述

[问题描述:尽可能简洁清晰地把问题描述清楚]
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]
0mkxixxg

0mkxixxg1#

麻烦将闪退问题和杂音问题整理出一个demo,我们这边测试一下,并详细描述可复现的手机的详细信息。

o2rvlv0m

o2rvlv0m2#

官方的demo也可以重现,只要把录音的动作改成touchstar录制,touchend停止,问题的点就在于如果是第一次使用recorderManager录制,会弹出授权。这个时候如果调用了recorderManager.stop,就能出现这个问题

相关问题