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} 是否获得录音权限 */ 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;