修改语音按钮获取录音授权

This commit is contained in:
田岩
2025-09-19 15:20:13 +08:00
parent a895c928bd
commit f5bdba03dc
15 changed files with 1538 additions and 1666 deletions
+93
View File
@@ -0,0 +1,93 @@
import {
getPhoneEnvBool
} from '@/common/common.js'
import common from '@/common/common.js'
const IsAndEnv = getPhoneEnvBool('AND')
import permission from '@/common/permission.js'
/**
* 录音权限工具类
* 统一处理安卓和iOS的录音权限状态:同意、拒绝、未设置
*/
const RecordPermission = {
hasRecordPermission: false,
/**
* 获取当前录音权限状态
* @returns {Promise<'granted'|'denied'|'undetermined'>} 权限状态
*/
getPermissionState() {
// #ifdef APP-PLUS
const authSetting = uni.getAppAuthorizeSetting();
const state = authSetting.microphoneAuthorized;
switch (state) {
case 'authorized':
return 'authorized';
case 'denied':
return 'denied';
case 'not determined':
return 'undetermined';
case 'config error':
return 'undetermined';
default:
return 'undetermined';
}
// #endif
// 非APP环境默认返回以获取方便h5调试
return 'undetermined';
},
/**
* 检查并请求录音权限
* @returns {Promise<boolean>} 是否获得录音权限
*/
requestPermission() {
if (this.hasRecordPermission) {
console.log('直接通过');
return Promise.resolve('authorized');
}
return new Promise(async (resolve, reject) => {
const state = this.getPermissionState();
// 已同意权限
console.log('权限状态', state);
if (state === 'authorized') {
this.hasRecordPermission = true; // 缓存权限状态
resolve('authorized')
};
if (state === 'denied') {
const result = await common.show(
'提示信息',
'当前页面需要使用录音权限,是否前往开启?'
)
if (result) {
// 前往权限设置页面
uni.openAppAuthorizeSetting();
reject('open_app_authorize_setting')
} else {
// 用户取消,返回上一页
reject('cancel')
}
}
if (state === 'undetermined') {
// #ifdef APP-PLUS
if (IsAndEnv) {
// 安卓需要再次请求权限
const permResult = await permission.requestAndroidPermission(
'android.permission.RECORD_AUDIO');
console.log('permResultx', permResult);
if(permResult === 1) {
}
} else {
reject('need_request');
}
// #endif
}
});
},
};
export default RecordPermission;