| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 | /** * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 */var isIos// #ifdef APP-PLUSisIos = (plus.os.name == "iOS")// #endif// 判断推送权限是否开启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;}// 判断定位权限是否开启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("麦克风权限没有开启");	} 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("相机权限没有开启");	}	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("相册权限没有开启");	}	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("通讯录权限没有开启");	}	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("日历权限没有开启");	}	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("备忘录权限没有开启");	}	plus.ios.deleteObject(EKEventStore);	return result;}// Android权限查询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				});			}		);	});}// 使用一个方法,根据参数判断权限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;}// 跳转到**应用**的权限页面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 () {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	}}module.exports = {	judgeIosPermission: judgeIosPermission,	requestAndroidPermission: requestAndroidPermission,	checkSystemEnableLocation: checkSystemEnableLocation,	gotoAppPermissionSetting: gotoAppPermissionSetting}
 |