let isIos = false; // #ifdef APP-PLUS isIos = (plus.os.name === 'iOS') // #endif // 判断安卓主方法 function requestAndroidPermission(permissionID, ifRequest) { return new Promise((resolve, reject) => { plus.android.requestPermissions([permissionID], onSuccess, onError) function onSuccess(res) { const grantedList = res.granted const deniedList = res.deniedPresent const deniedAlwaysList = res.deniedAlways if (grantedList.includes(permissionID)) { resolve(true) } else { resolve(false) ifRequest && gotoAppPermissionSetting() } } function onError(err) { reject(err) } }) } // 分别判断Ios function judgeIosPermissionPush(ifRequest) { return new Promise(resolve => { 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) { ifRequest && gotoAppPermissionSetting() resolve(false) } else { resolve(true) } plus.ios.deleteObject(settings); } else { enabledTypes = app.enabledRemoteNotificationTypes(); if (enabledTypes == 0) { ifRequest && gotoAppPermissionSetting() resolve(false) } else { resolve(true) } } plus.ios.deleteObject(app); plus.ios.deleteObject(UIApplication); }) } // 判断定位权限是否开启 function judgeIosPermissionLocation(ifRequest) { return new Promise(resolve => { var cllocationManger = plus.ios.import("CLLocationManager"); var status = cllocationManger.authorizationStatus(); if (status == 2) { ifRequest && gotoAppPermissionSetting() resolve(false) } else { resolve(true) } plus.ios.deleteObject(cllocationManger); }) } // 判断麦克风权限是否开启 function judgeIosPermissionRecord(ifRequest) { return new Promise(resolve => { var avaudiosession = plus.ios.import("AVAudioSession"); var avaudio = avaudiosession.sharedInstance(); var permissionStatus = avaudio.recordPermission(); if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { ifRequest && gotoAppPermissionSetting() resolve(false) } else { resolve(true) } plus.ios.deleteObject(avaudiosession); }) } // 判断相机权限是否开启 function judgeIosPermissionCamera(ifRequest) { return new Promise(resolve => { var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); var authStatus = AVCaptureDevice.authorizationStatusForMediaType('video'); if (authStatus == 3) { resolve(true) } else { ifRequest && gotoAppPermissionSetting() resolve(false) } plus.ios.deleteObject(AVCaptureDevice); }) } // 判断相册权限是否开启 function judgeIosPermissionPhotoLibrary(ifRequest) { return new Promise(resolve => { var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); var authStatus = PHPhotoLibrary.authorizationStatus(); if (authStatus == 3) { resolve(true) } else { ifRequest && gotoAppPermissionSetting() resolve(false) } plus.ios.deleteObject(PHPhotoLibrary); }) } // 判断通讯录权限是否开启 function judgeIosPermissionContact(ifRequest) { return new Promise(resolve => { var CNContactStore = plus.ios.import("CNContactStore"); var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); if (cnAuthStatus == 3) { resolve(true) } else { ifRequest && gotoAppPermissionSetting() resolve(false) } plus.ios.deleteObject(CNContactStore); }) } // 判断所有权限 function getPermisson(permisson, ifRequest = false) { switch (permisson) { case "location": if (isIos) { return judgeIosPermissionLocation(ifRequest) } else { return requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION", ifRequest) } break; case "camera": if (isIos) { return judgeIosPermissionCamera(ifRequest) } else { return requestAndroidPermission("android.permission.CAMERA", ifRequest) } break; case "photo": if (isIos) { return judgeIosPermissionPhotoLibrary(ifRequest) } else { return requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE", ifRequest) } break; case "record": if (isIos) { return judgeIosPermissionRecord(ifRequest) } else { return requestAndroidPermission("android.permission.RECORD_AUDIO", ifRequest) } break; case "contact": if (isIos) { return judgeIosPermissionContact(ifRequest) } else { return requestAndroidPermission("android.permission.READ_CONTACTS", ifRequest) } break; case "call": if (isIos) { return Promise.resolve(true) } else { return requestAndroidPermission("android.permission.CALL_PHONE", ifRequest) } break; case "push": if (isIos) { return judgeIosPermissionPush(ifRequest) } else { return Promise.resolve(true) } break; default: break; } } // 去设置 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 { 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); } } // 检查是否开启了定位 function checkSystemEnableLocation() { if (isIos) { var result = false; var cllocationManger = plus.ios.import("CLLocationManager"); var result = cllocationManger.locationServicesEnabled(); 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); return result } } export default { getPermisson, checkSystemEnableLocation }