代碼包含功能如下:
1、判斷推送權限是否開啟
2、判斷定位權限是否開啟
3、判斷麥克風權限是否開啟
4、判斷相機權限是否開啟
5、判斷相冊權限是否開啟
6、判斷通訊錄權限是否開啟
7、判斷日歷權限是否開啟
8、判斷備忘錄權限是否開啟
9、Android權限查詢
10、檢查系統的設備服務是否開啟
廢話不多說上代碼
/*** 本模塊封裝了Android、iOS的應用權限判斷、打開應用權限設置界面、以及位置系統服務是否開啟*/var isIos
// #ifdef APP-PLUS
isIos = (plus.os.name == "iOS")
// #endif// 判斷推送權限是否開啟
export 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("推送權限沒有開啟");} 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;
}// 判斷定位權限是否開啟
export 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;
}// 判斷麥克風權限是否開啟
export function judgeIosPermissionRecord() {var result = false;// ios 判斷if (isIos) {var avaudiosession = plus.ios.import("AVAudioSession");var avaudio = avaudiosession.sharedInstance();var permissionStatus = avaudio.recordPermission();console.log("permissionStatus:" + permissionStatus);if (permissionStatus == 1970168948) {console.log("麥克風權限沒有開啟");/** * 申請麥克風權限 requestRecordPermission * 調用入參:handler回調函數(無回調結果) * * 當權限狀態為:1970168948用戶未作出選擇時,調用此方法系統會彈出提示框讓用戶確認授權 * 當權限狀態非:1970168948時,只能跳轉到系統設置界面,讓用戶手動開啟,使用plus.runtime.openURL("app-settings://");跳轉,或者gotoAppPermissionSetting(參考插件https://ext.dcloud.net.cn/plugin?id=594) */ avaudio.requestRecordPermission(()=>{ console.error('回調完成');});// plus.device.beep(1);result = false;} else if(permissionStatus == 1684369017){uni.showModal({title: '提示',content: '需要麥克風權限才能使用錄音功能,是否去設置開啟?',success: function(res) {if (res.confirm) {// gotoAppPermissionSetting();plus.runtime.openURL("app-settings://");}}});result = false;} else {result = true;console.error("麥克風權限已經開啟");}plus.ios.deleteObject(avaudiosession);} else {var PackageManager = plus.android.importClass("android.content.pm.PackageManager");var main = plus.android.runtimeMainActivity();var checkPermission = main.checkSelfPermission("android.permission.RECORD_AUDIO");if(checkPermission == PackageManager.PERMISSION_GRANTED) {console.log("麥克風權限已經開啟");result = true;} else {console.log("麥克風權限沒有開啟");plus.android.requestPermissions(['android.permission.RECORD_AUDIO'], function(e) {if (e.deniedAlways.length > 0) { // 權限被永久拒絕 //用戶沒有選擇竟然也是跟永久拒絕返回的參數一樣(暫時無解),微信也是這樣做的console.log('永久拒絕!' + e.deniedAlways.toString());uni.showModal({title: '提示',content: '需要麥克風權限才能使用錄音功能,是否去設置開啟?',success: function(res) {if (res.confirm) {gotoAppPermissionSetting();}}});result = false;} else if (e.deniedPresent.length > 0) { // 權限被臨時拒絕console.log('臨時拒絕!' + e.deniedPresent.toString());result = false;} else if (e.granted.length > 0) { // 權限被允許console.log('已授權!' + e.granted.toString());result = false;} else { console.log('未做選擇');result = false;}}, function(e) {console.log('請求權限錯誤:' + JSON.stringify(e));result = false;});}}console.error("語音授權結果-----------", result);return result;
}// 判斷相機權限是否開啟
export 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("相機權限沒有開啟");}plus.ios.deleteObject(AVCaptureDevice);return result;
}// 判斷相冊權限是否開啟
export 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("相冊權限沒有開啟");}plus.ios.deleteObject(PHPhotoLibrary);return result;
}// 判斷通訊錄權限是否開啟
export 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("通訊錄權限沒有開啟");}plus.ios.deleteObject(CNContactStore);return result;
}// 判斷日歷權限是否開啟
export 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("日歷權限沒有開啟");}plus.ios.deleteObject(EKEventStore);return result;
}// 判斷備忘錄權限是否開啟
export 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("備忘錄權限沒有開啟");}plus.ios.deleteObject(EKEventStore);return result;
}// Android權限查詢
export function requestAndroidPermission(permissionID) {return new Promise((resolve, reject) => {plus.android.requestPermissions([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});});});
}// 使用一個方法,根據參數判斷權限
export function judgeIosPermission(permissionID) {if (permissionID == "location") {return judgeIosPermissionLocation()} else if (permissionID == "camera") {return judgeIosPermissionCamera()} else if (permissionID == "photoLibrary") {return judgeIosPermissionPhotoLibrary()} else if (permissionID == "record") {return judgeIosPermissionRecord()} else if (permissionID == "push") {return judgeIosPermissionPush()} else if (permissionID == "contact") {return judgeIosPermissionContact()} else if (permissionID == "calendar") {return judgeIosPermissionCalendar()} else if (permissionID == "memo") {return judgeIosPermissionMemo()}return false;
}// 跳轉設置 跳轉到**應用**的權限頁面
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)}
}// 檢查系統的設備服務是否開啟
// 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}
}