// PermissionHandler.js import permisionUtil from "./permission.js"; import { popup } from './native_popup.js'; const prefix = 'permision_'; const PermissionStatus = { GRANTED: 1, DENIED: -1, ERROR: 0 }; // 权限配置对象 const permissionConfig = { chooseImage: { permissions: ['android.permission.CAMERA', 'android.permission.READ_EXTERNAL_STORAGE'], message: '为了正确识别证件内容,实现图片转文字功能等, 我们需要申请您设备的相机和存储权限。' }, chooseVideo: { permissions: ['android.permission.CAMERA', 'android.permission.READ_EXTERNAL_STORAGE'], message: '为了发布信息图片视频等, 我们需要申请您设备的相机和存储权限。' }, saveImageToPhotosAlbum: { permissions: ['android.permission.WRITE_EXTERNAL_STORAGE'], message: '为了保存推广海报到手机相册, 我们需要申请您设备的存储权限。' }, getLocation: { permissions: ['android.permission.ACCESS_FINE_LOCATION'], message: '为了根据您的位置展示信息, 我们需要申请您设备的位置权限。' }, getRecorderManager: { permissions: ['android.permission.RECORD_AUDIO'], message: '为了使用语言消息功能等, 我们需要申请您设备的麦克风权限。' } }; // 显示权限说明弹窗 const showPermissionExplanation = function(content) { return new Promise((resolve, reject) => { uni.showModal({ title: '权限申请说明', content: content, cancelText: '拒绝', confirmText: '允许', success: (res) => { if (res.confirm) { // 用户点击允许 resolve(true); } else { // 用户点击拒绝 reject(false); } } }); }); }; // 请求权限并处理 const requestPermissions = async function(permissions, message) { try { const explanationAccepted = await showPermissionExplanation(message); if (explanationAccepted) { for (const permission of permissions) { const status = await permisionUtil.requestAndroidPermission(permission); if (status !== PermissionStatus.GRANTED) { return false; // 如果有任何权限请求失败,返回 false } } return true; // 所有权限请求成功 } } catch (error) { return false; // 用户拒绝说明弹窗 } }; // 添加权限拦截器 const addPermissionInterceptor = function(apiName) { const { permissions, message } = permissionConfig[apiName]; uni.addInterceptor(apiName, { invoke(args) { return new Promise(async (resolve, reject) => { const perm = uni.getStorageSync(prefix + apiName); if (perm === PermissionStatus.GRANTED) { resolve(args); // 权限已授予,继续执行 return; } const permissionsGranted = await requestPermissions(permissions, message); if (permissionsGranted) { uni.setStorageSync(prefix + apiName, PermissionStatus.GRANTED); resolve(args); // 权限请求成功,继续执行 } else { reject(args); // 权限请求失败,提示用户手动开启权限 uni.showModal({ title: '权限被拒绝', content: '请前往设置手动开启权限,以便使用该功能。', showCancel: false, confirmText: '知道了' }); } }); }, fail(err) { console.error('权限请求失败', err); } }); }; // 导出功能 export default { addPermissionInterceptor };