123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 |
- /**
- * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启
- */
- var isIos
- // #ifdef APP-PLUS
- isIos = (plus.os.name == "iOS")
- // #endif
-
- // 判断推送权限是否开启
- function judgeIosPermissionPush() {
- var result = 0;
- var UIApplication = plus.ios.import("UIApplication");
- var app = UIApplication.sharedApplication();
- var enabledTypes = 0;
- if (app.currentUserNotificationSettings) {
- var settings = app.currentUserNotificationSettings();
- enabledTypes = settings.plusGetAttribute("types");
- if (enabledTypes == 0) {
- console.log("推送权限没有开启");
- } else {
- result = 1;
- console.log("已经开启推送功能!")
- }
- plus.ios.deleteObject(settings);
- } else {
- enabledTypes = app.enabledRemoteNotificationTypes();
- if (enabledTypes == 0) {
- console.log("推送权限没有开启!");
- } else {
- result = 1;
- console.log("已经开启推送功能!")
- }
- console.log("enabledTypes2:" + enabledTypes);
- }
- plus.ios.deleteObject(app);
- plus.ios.deleteObject(UIApplication);
- return result;
- }
- // 判断定位权限是否开启
- function judgeIosPermissionLocation() {
- var result = 0;
- var cllocationManger = plus.ios.import("CLLocationManager");
- var status = cllocationManger.authorizationStatus();
- result = (status != 2) ? 1 : 0;
- console.log("定位权限开启:" + result);
- plus.ios.deleteObject(cllocationManger);
- return {
- result: result,
- permissionName: "定位"
- };
- }
- // 判断麦克风权限是否开启
- function judgeIosPermissionRecord() {
- var result = 0;
- 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("麦克风权限没有开启");
- } else {
- result = 1;
- console.log("麦克风权限已经开启");
- }
- plus.ios.deleteObject(avaudiosession);
- return {
- result: result,
- permissionName: "麦克风"
- };
- }
- // 判断相机权限是否开启
- function judgeIosPermissionCamera() {
- var result = 0;
- var AVCaptureDevice = plus.ios.import("AVCaptureDevice");
- var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide');
- console.log("authStatus:" + authStatus);
- if (authStatus == 3) {
- result = 1;
- console.log("相机权限已经开启");
- } else {
- console.log("相机权限没有开启");
- }
- plus.ios.deleteObject(AVCaptureDevice);
- return {
- result: result,
- permissionName: "相机"
- };
- }
- // 判断相册权限是否开启
- function judgeIosPermissionPhotoLibrary() {
- var result = 0;
- var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary");
- var authStatus = PHPhotoLibrary.authorizationStatus();
- console.log("authStatus:" + authStatus);
- if (authStatus == 3) {
- result = 1;
- console.log("相册权限已经开启");
- } else {
- console.log("相册权限没有开启");
- }
- plus.ios.deleteObject(PHPhotoLibrary);
- return {
- result: result,
- permissionName: "相册"
- };
- }
- // 判断通讯录权限是否开启
- function judgeIosPermissionContact() {
- var result = 0;
- var CNContactStore = plus.ios.import("CNContactStore");
- var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0);
- if (cnAuthStatus == 3) {
- result = 1;
- console.log("通讯录权限已经开启");
- } else {
- console.log("通讯录权限没有开启");
- }
- plus.ios.deleteObject(CNContactStore);
- return {
- result: result,
- permissionName: "通讯录"
- };
- }
- // 判断日历权限是否开启
- function judgeIosPermissionCalendar() {
- var result = 0;
- var EKEventStore = plus.ios.import("EKEventStore");
- var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0);
- if (ekAuthStatus == 3) {
- result = 1;
- console.log("日历权限已经开启");
- } else {
- console.log("日历权限没有开启");
- }
- plus.ios.deleteObject(EKEventStore);
- return {
- result: result,
- permissionName: "日历"
- };
- }
- // 判断备忘录权限是否开启
- function judgeIosPermissionMemo() {
- var result = 0;
- var EKEventStore = plus.ios.import("EKEventStore");
- var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1);
- if (ekAuthStatus == 3) {
- result = 1;
- console.log("备忘录权限已经开启");
- } else {
- console.log("备忘录权限没有开启");
- }
- plus.ios.deleteObject(EKEventStore);
- return {
- result: result,
- permissionName: "备忘录"
- };
- }
- // Android权限查询
- function requestAndroidPermission(permissionID, permissionName) {
- return new Promise((resolve, reject) => {
- plus.android.requestPermissions(
- [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
- function(resultObj) {
- console.log('resultObj:99999', 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: result,
- permissionName: permissionName
- });
- // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限
- if (result != 1) {
- gotoAppPermissionSetting()
- }
- },
- function(error) {
- console.log('申请权限错误:' + error.code + " = " + error.message);
- resolve({
- code: error.code,
- message: error.message
- });
- }
- );
- });
- }
- /**
- * 授权前告知用户使用意图
- * @param content
- * @returns
- */
- const showAuthTipModal = async (string) => {
- // #ifdef H5
- if (1 === 1) {
- return true;
- }
- // #endif
- // ios端在manifest.json配置权限使用说明,以下权限判断仅在安卓端可用
- var Manifest = plus.android.importClass("android.Manifest");
- var MainActivity = plus.android.runtimeMainActivity();
- var arr = string.split(".")
- let result = MainActivity.checkSelfPermission(Manifest.permission[arr[2]]);
- console.log('result: ', result);
- if (result === 0) 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: '便于您使用该功能拨发货人、司机、客服电话,请您确认授权,否则无法使用该功能'
- }
- };
-
- return new Promise((resolve) => {
- alert(55)
- resolve(false)
-
- // uni.showModal({
- // title: contentData[string].title,
- // content: contentData[string].describe,
- // success: (res) => {
- // console.log(res,111);
- // resolve(!!res.confirm);
- // },
- // fail: () => {}
- // });
- });
- };
- async function getUserLocation(permissionID, callback) {
- return new Promise(async (resolve, reject) => {
-
- let authFlag = await showAuthTipModal(permissionID);
- return resolve(authFlag)
- });
- }
- // 判断是否有权限
- function judgePermission(permissionID, callback) {
- function handle(res) {
- callback && callback(res);
- // 引导用户去开通权限的弹窗
- if (res === -1) {
- uni.showModal({
- title: "提示",
- content: "您还未开通" + res.permissionName + "权限,是否去应用设置里开通~",
- confirmText: "去开通",
- cancelText: "再逛会",
- success: (data) => {
- if (data.confirm) {
- gotoAppPermissionSetting();
- }
- }
- });
- }
- }
- if (permissionID == "location") { // 位置
- if (isIos) {
- handle(judgeIosPermissionLocation());
- } else {
- requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", "位置").then(handle);
- }
- } else if (permissionID == "camera") { // 摄像头
- if (isIos) {
- handle(judgeIosPermissionCamera());
- } else {
- requestAndroidPermission("android.permission.CAMERA", "摄像头").then(handle);
- }
- } else if (permissionID == "photoLibrary") { // 相册
- if (isIos) {
- handle(judgeIosPermissionPhotoLibrary());
- } else {
- getUserLocation("android.permission.READ_EXTERNAL_STORAGE", "相册读取").then(handle);
- // requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE", "相册读取").then(handle);
- }
- } else if (permissionID == "record") { // 麦克风
- if (isIos) {
- handle(judgeIosPermissionRecord());
- } else {
- requestAndroidPermission("android.permission.RECORD_AUDIO", "麦克风").then(handle);
- }
- } else if (permissionID == "push") { // 推送
- if (isIos) {
- handle(judgeIosPermissionPush());
- } else {
- handle(1);
- }
- } else if (permissionID == "contact") { // 通讯录
- if (isIos) {
- handle(judgeIosPermissionContact());
- } else {
- requestAndroidPermission("android.permission.READ_CONTACTS", "通讯录读取").then(handle);
- }
- } else if (permissionID == "calendar") { // 日历
- if (isIos) {
- handle(judgeIosPermissionCalendar());
- } else {
- requestAndroidPermission("android.permission.READ_CALENDAR", "日历读取").then(handle);
- }
- } else if (permissionID == "memo") { // 备忘录
- if (isIos) {
- handle(judgeIosPermissionMemo());
- } else {
- handle(1);
- }
- } else if (permissionID == "call_phone") { // 拨打电话
- if (isIos) {
- handle(1);
- } else {
- requestAndroidPermission("android.permission.CALL_PHONE", "拨打电话").then(handle);
- }
- }
- }
-
- export default judgePermission
|