封装权限判断工具类
新建一个authorizeUtils.ts文件,直接无脑复制如下代码:
const checkIsIos = async () => {
return new Promise((resolve => {
uni.getSystemInfo({
success: function (res) {
resolve(res.platform === "ios")
}
});
}))
}
function requestAndroidPermission(permissionID) {
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
permissionID.split(","),
// [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function(resultObj) {
var result = 0;
for (var i = 0; i < resultObj.granted.length; i++) {
var grantedPermission = resultObj.granted[i];
console.log('已获取的权限:' + grantedPermission);
result = 1
}
for (var i = 0; i < resultObj.deniedPresent.length; i++) {
var deniedPresentPermission = resultObj.deniedPresent[i];
console.log('拒绝本次申请的权限:' + deniedPresentPermission);
result = 0
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log('永久拒绝申请的权限:' + deniedAlwaysPermission);
result = -1
}
resolve(result);
// 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
// if (result != 1) {
// gotoAppPermissionSetting()
// }
},
function(error) {
console.log('申请权限错误:' + error.code + " = " + error.message);
resolve({
code: error.code,
message: error.message
});
}
);
});
}
class authorizeUtils {
/**
* 授权前告知用户使用意图
* @param content
* @returns
*/
static showAuthTipModal = async (authorize: string) => {
// #ifdef H5
if (1 === 1) {
return true
}
// #endif
// ios端在manifest.json配置权限使用说明,以下权限判断仅在安卓端可用
console.log("进来了?---")
let isIos = await checkIsIos()
if (isIos) return true
let isAuth=plus.navigator.checkPermission(authorize)
console.log(isAuth=='undetermined',"是否打开了权限?")
if(isAuth=='undetermined'){
// 没有打开权限
}else{
// 打开了
return true
}
// // 如果已经授权直接返回
const contentData = {
['android.permission.ACCESS_FINE_LOCATION']: {
title: "定位权限说明",
describe: "便于您使用该功能在地图找房中根据您的位置检索附近的房源,请您确认授权,否则无法使用该功能"
},
["android.permission.READ_EXTERNAL_STORAGE"]: {
title: "相册权限说明",
describe: "便于您使用该功能上传您的照片/图片完成上传头像、意见反馈图片,请您确认授权,否则无法使用该功能"
},
["android.permission.CAMERA"]: {
title: "拍摄权限说明",
describe: "便于您使用该功能拍摄身份证、房源、头像、房产证等信息,请您确认授权,否则无法使用该功能"
},
["android.permission.CALL_PHONE"]: {
title: "拨打电话权限说明",
describe: "便于您使用该功能拨打客服电话,请您确认授权,否则无法使用该功能"
},
}
console.log('到这里了哦')
return new Promise((resolve) => {
uni.showModal({
title: contentData[authorize].title,
content: contentData[authorize].describe,
success: (res) => {
resolve(!!res.confirm)
},
fail: () => {
}
})
})
}
/**
* 用户拒绝授权提示手动授权
*/
static showManualAuth = async (authorize: string) => {
let isIos = await checkIsIos()
if (isIos) return true
const contentData = {
['android.permission.ACCESS_FINE_LOCATION']: "获取定位权限失败,请手动打开授权或检查系统定位开关",
["android.permission.READ_EXTERNAL_STORAGE"]: "获取相册权限失败,请手动打开授权",
["android.permission.CAMERA"]: "获取拍摄权限失败,请手动打开授权",
["android.permission.CALL_PHONE"]: "获取拨打电话权限失败,请手动打开授权",
}
uni.showModal({
title: '提示',
content: contentData[authorize],
confirmText: "去设置",
success: (res) => {
if (res.confirm) {
uni.openAppAuthorizeSetting({
success(res) {
console.log(res);
}
});
}
if (res.cancel) {
console.log('用户点击取消');
}
}
});
}
}
export default authorizeUtils
使用工具类
app端选择图片方法chooseImage,默认是弹出选项拍照和从相册选择,但是拍照和从相册选择是两种不同的权限,所以这个弹出选项需要自己手动写,用户选择拍照就请求相机权限,从相册选择就请求存储权限
onst handleUpload = async (openType: "camera" | "album") => {
let result = await permision.showAuthTipModal("android.permission.READ_EXTERNAL_STORAGE")
console.log(result ,"哈哈哈---")
if(result ){
//打开了权限了
}else{
、、//没有打开
}
};