94 lines
2.2 KiB
JavaScript
94 lines
2.2 KiB
JavaScript
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');
|
|
if(permResult === 1) {
|
|
resolve('need_request');
|
|
} else {
|
|
reject('permResultx')
|
|
}
|
|
} else {
|
|
resolve('need_request');
|
|
}
|
|
// #endif
|
|
}
|
|
});
|
|
},
|
|
|
|
|
|
};
|
|
|
|
export default RecordPermission; |