merchapp/java-mall-app-shop-admin/utils/permission.js

549 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//permission.js
/**
* 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
*/
var isIos;
var unPermission = []; //当前未获取到的权限
// #ifdef APP-PLUS
isIos = plus.os.name == "iOS";
// #endif
var viewShow = true;
// 判断推送权限是否开启
function judgeIosPermissionPush() {
var result = false;
var UIApplication = plus.ios.import("UIApplication");
var app = UIApplication.sharedApplication();
var enabledTypes = 0;
if (app.currentUserNotificationSettings) {
var settings = app.currentUserNotificationSettings();
enabledTypes = settings.plusGetAttribute("types");
console.log("enabledTypes1:" + enabledTypes);
if (enabledTypes == 0) {
console.log("推送权限没有开启");
unPermission.push("推送权限");
} else {
result = true;
console.log("已经开启推送功能!");
}
plus.ios.deleteObject(settings);
} else {
enabledTypes = app.enabledRemoteNotificationTypes();
if (enabledTypes == 0) {
console.log("推送权限没有开启!");
} else {
result = true;
console.log("已经开启推送功能!");
}
console.log("enabledTypes2:" + enabledTypes);
}
plus.ios.deleteObject(app);
plus.ios.deleteObject(UIApplication);
return result;
}
// 判断定位权限是否开启
function judgeIosPermissionLocation() {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var status = cllocationManger.authorizationStatus();
result = status != 2;
console.log("定位权限开启:" + result);
// 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation
/* var enable = cllocationManger.locationServicesEnabled();
var status = cllocationManger.authorizationStatus();
console.log("enable:" + enable);
console.log("status:" + status);
if (enable && status != 2) {
result = true;
console.log("手机定位服务已开启且已授予定位权限");
} else {
console.log("手机系统的定位没有打开或未给予定位权限");
} */
plus.ios.deleteObject(cllocationManger);
return result;
}
// 判断麦克风权限是否开启
function judgeIosPermissionRecord() {
var result = false;
var avaudiosession = plus.ios.import("AVAudioSession");
var avaudio = avaudiosession.sharedInstance();
var permissionStatus = avaudio.recordPermission();
console.log("permissionStatus:" + permissionStatus);
if (permissionStatus == 1684369017 || permissionStatus == 1970168948) {
console.log("麦克风权限没有开启");
unPermission.push("麦克风权限");
} else {
result = true;
console.log("麦克风权限已经开启");
}
plus.ios.deleteObject(avaudiosession);
return result;
}
// 判断相机权限是否开启
function judgeIosPermissionCamera() {
var result = false;
var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
var authStatus = AVCaptureDevice.authorizationStatusForMediaType("vide");
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相机权限已经开启");
} else {
console.log("相机权限没有开启");
unPermission.push("相机权限");
}
plus.ios.deleteObject(AVCaptureDevice);
return result;
}
// 判断相册权限是否开启
function judgeIosPermissionPhotoLibrary() {
var result = false;
var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
var authStatus = PHPhotoLibrary.authorizationStatus();
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相册权限已经开启");
} else {
console.log("相册权限没有开启");
unPermission.push("相册权限");
}
plus.ios.deleteObject(PHPhotoLibrary);
return result;
}
// 判断通讯录权限是否开启
function judgeIosPermissionContact() {
var result = false;
var CNContactStore = plus.ios.import("CNContactStore");
var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
if (cnAuthStatus == 3) {
result = true;
console.log("通讯录权限已经开启");
} else {
console.log("通讯录权限没有开启");
unPermission.push("通讯录权限");
}
plus.ios.deleteObject(CNContactStore);
return result;
}
// 判断日历权限是否开启
function judgeIosPermissionCalendar() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
if (ekAuthStatus == 3) {
result = true;
console.log("日历权限已经开启");
} else {
console.log("日历权限没有开启");
unPermission.push("日历权限");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
// 判断备忘录权限是否开启
function judgeIosPermissionMemo() {
var result = false;
var EKEventStore = plus.ios.import("EKEventStore");
var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
if (ekAuthStatus == 3) {
result = true;
console.log("备忘录权限已经开启");
} else {
console.log("备忘录权限没有开启");
nPermission.push("备忘录权限");
}
plus.ios.deleteObject(EKEventStore);
return result;
}
//获取当前权限中文描述
function getCurrentPermissionType(permissionId) {
console.log(permissionId);
switch (permissionId) {
case "android.permission.READ_EXTERNAL_STORAGE":
return "文件读取权限";
case "android.permission.WRITE_EXTERNAL_STORAGE":
return "文件写入权限";
case "android.permission.CAMERA":
return "相机权限";
case "android.permission.RECORD_AUDIO":
return "麦克风权限";
default:
return "其他权限";
}
}
// Android权限查询 -export
function requestAndroidPermission(permissionID) {
console.log(permissionID.split(","));
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);
console.log("deniedPresentPermission", deniedPresentPermission);
let permissionName = getCurrentPermissionType(
deniedPresentPermission
);
console.log(permissionName);
unPermission.push(permissionName);
result = 0;
}
for (var i = 0; i < resultObj.deniedAlways.length; i++) {
var deniedAlwaysPermission = resultObj.deniedAlways[i];
console.log("永久拒绝申请的权限:" + deniedAlwaysPermission);
console.log("deniedPresentPermission", deniedAlwaysPermission);
let permissionName = getCurrentPermissionType(deniedAlwaysPermission);
unPermission.push(permissionName);
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,
});
}
);
});
}
// 使用一个方法,根据参数判断权限 -export
function judgeIosPermission(permissionID) {
return new Promise((resolve, reject) => {
console.log(permissionID);
let result;
if (permissionID == "location") {
result = judgeIosPermissionLocation();
resolve(result);
} else if (permissionID == "camera") {
result = judgeIosPermissionCamera();
resolve(result);
} else if (permissionID == "photoLibrary") {
result = judgeIosPermissionPhotoLibrary();
resolve(result);
} else if (permissionID == "record") {
result = judgeIosPermissionRecord();
resolve(result);
} else if (permissionID == "push") {
result = judgeIosPermissionPush();
resolve(result);
} else if (permissionID == "contact") {
result = judgeIosPermissionContact();
resolve(result);
} else if (permissionID == "calendar") {
result = judgeIosPermissionCalendar();
resolve(result);
} else if (permissionID == "memo") {
result = judgeIosPermissionMemo();
resolve(result);
}
resolve(false);
});
}
// 跳转到**应用**的权限页面 -export
export function gotoAppPermissionSetting() {
if (isIos) {
var UIApplication = plus.ios.import("UIApplication");
var application2 = UIApplication.sharedApplication();
var NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
var setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
} else {
// console.log(plus.device.vendor);
var Intent = plus.android.importClass("android.content.Intent");
var Settings = plus.android.importClass("android.provider.Settings");
var Uri = plus.android.importClass("android.net.Uri");
var mainActivity = plus.android.runtimeMainActivity();
var intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
}
// 检查系统的设备服务是否开启 -export
// var checkSystemEnableLocation = async function () {
export function checkSystemEnableLocation() {
if (isIos) {
var result = false;
var cllocationManger = plus.ios.import("CLLocationManager");
var result = cllocationManger.locationServicesEnabled();
console.log("系统定位开启:" + result);
plus.ios.deleteObject(cllocationManger);
return result;
} else {
var context = plus.android.importClass("android.content.Context");
var locationManager = plus.android.importClass(
"android.location.LocationManager"
);
var main = plus.android.runtimeMainActivity();
var mainSvr = main.getSystemService(context.LOCATION_SERVICE);
var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER);
console.log("系统定位开启:" + result);
return result;
}
}
let permissionMap = {
android: {
CAMERA_EXTERNAL_STORAGE: {
// 相机权限/相册读写权限
name: "android.permission.READ_EXTERNAL_STORAGE,android.permission.CAMERA",
title: "相机/相册权限说明",
content:
"用于读取您的相册和相机权限,实现发送视频或拍摄视频给好友聊天",
},
CAMERA: {
// 相机权限
name: "android.permission.WRITE_EXTERNAL_STORAGE,android.permission.CAMERA",
title: "相机权限说明",
content: "用于读取您的相机权限,实现拍摄相片发送给好友聊天",
},
EXTERNAL_STORAGE: {
//相册读权限
name: "android.permission.READ_EXTERNAL_STORAGE",
title: "相册读写权限说明",
content: "用于读取您的相册图片权限实现发送图片给好友聊天或更换店铺LOGO",
},
CAMERA_EXTERNAL_STORAGE_RECORD_AUDIO: {
//视频录制和获取权限
name: "android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE,android.permission.CAMERA",
title: "相机/相册和麦克风权限说明",
content:
"用于读取您的相册视频或录制视频权限,实现发送视频给好友聊天",
},
RECORD: {
//录制语音权限
name: "android.permission.RECORD_AUDIO",
title: "麦克风权限说明",
content:
"用于读取您的麦克风录音权限,实现发送语音给好友聊天",
},
},
ios: {},
};
let view = null;
//华为要求每一个获取权限都要有对应的说明提示,否则无法上架
function showViewDesc(permission) {
let plat = isIos ? "ios" : "android";
view = new plus.nativeObj.View("per-modal", {
top: "0px",
left: "0px",
width: "100%",
backgroundColor: "rgba(0,0,0,0.2)",
//opacity: '.9'
});
view.drawRect(
{
color: "#fff",
radius: "5px",
},
{
top: "30px",
left: "5%",
width: "90%",
height: "100px",
}
);
view.drawText(
permissionMap[plat][permission]["title"],
{
top: "40px",
left: "8%",
height: "30px",
},
{
align: "left",
color: "#000",
},
{
onClick: function (e) {
console.log(e);
},
}
);
view.drawText(
permissionMap[plat][permission]["content"],
{
top: "65px",
height: "60px",
left: "8%",
width: "84%",
},
{
whiteSpace: "normal",
size: "14px",
align: "left",
color: "#656563",
}
);
setTimeout(() => {
if (viewShow) view.show();
}, 200);
}
async function permissionIosCheck(permission) {
console.log("permissionIosCheck", permission);
let results = [];
if (permission == "CAMERA_EXTERNAL_STORAGE") {
results.push(await judgeIosPermission("camera"));
results.push(await judgeIosPermission("photoLibrary"));
} else if (permission == "CAMERA_EXTERNAL_STORAGE_RECORD_AUDIO") {
results.push(await judgeIosPermission("camera"));
results.push(await judgeIosPermission("photoLibrary"));
results.push(await judgeIosPermission("record"));
} else if (permission == "CAMERA") {
results.push(await judgeIosPermission("camera"));
} else if (permission == "RECORD") {
results.push(await judgeIosPermission("record"));
} else if (permission == "PHOTO_LIBRARY") {
results.push(await judgeIosPermission("photoLibrary"));
}
// 检查所有权限是否都已开启
let allPermissionsGranted = results.every((result) => result);
return allPermissionsGranted;
}
// 权限检查
/**
*
* @param {*} permission // 要获取的权限 type:String
* @returns
*/
function premissionCheck(permission) {
console.log(permission);
console.log(isIos);
return new Promise(async (resolve, reject) => {
let plat = isIos ? "ios" : "android";
unPermission = [];
if (isIos) {
// ios
// const camera = judgeIosPermissionCamera();//判断ios是否给予摄像头权限
// //ios相册没权限系统会自动弹出授权框
// //let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
// if(camera){
// resolve();
// }else{
// reject('需要开启相机使用权限');
// }
console.log("permission", permission);
if (permission) {
let result = await permissionIosCheck(permission);
if (result) {
resolve(1);
} else {
// reject('需要开启相机使用权限');
let str = unPermission.join(",");
uni.showModal({
title: "温馨提示",
content: `请注意:该功能需要获取${str}!`,
showCancel: true,
confirmText: "去设置",
success: function (res) {
if (res.confirm) {
gotoAppPermissionSetting();
} else if (res.cancel) {
return;
}
},
});
}
}
} else {
// android
console.log("android");
let permission_arr = permissionMap[plat][permission]["name"].split(",");
console.log(permission_arr);
let flag = true;
for (let i = 0; i < permission_arr.length; i++) {
let status = plus.navigator.checkPermission(permission_arr[i]);
if (status == "undetermined") {
flag = false;
}
}
console.log("flag", flag);
if (flag == false) {
// 未完全授权
console.log("未授权");
showViewDesc(permission);
requestAndroidPermission(permissionMap[plat][permission]["name"]).then(
(res) => {
viewShow = false;
setTimeout(() => {
viewShow = true;
}, 120);
console.log("值", res);
if (res == -1) {
let str = unPermission.join(",");
console.log(str);
uni.showModal({
title: "提示",
content: `操作权限已被拒绝,请手动前往设置${str}`,
confirmText: "立即设置",
success: (res) => {
if (res.confirm) {
gotoAppPermissionSetting();
}
view.close();
resolve(res);
},
fail() {
view.close();
resolve(res);
},
});
} else if (res == 1) {
view.close();
resolve(res);
} else {
view.close();
}
}
);
} else {
resolve(1);
}
}
});
}
module.exports = {
judgeIosPermission: judgeIosPermission,
requestAndroidPermission: requestAndroidPermission,
checkSystemEnableLocation: checkSystemEnableLocation,
gotoAppPermissionSetting: gotoAppPermissionSetting,
premissionCheck: premissionCheck,
};