uniapp 判断安卓iOS权限

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('vide');
		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
}

以上是代码封装

以下是使用方式

// 使用
import $P from '../../../utils/zpermission.js'

onShow() {
	$P.getPermisson('location').then(res => {
		console.log(res) // true or false
	})
	const res = $P.checkSystemEnableLocation()
	console.log(res)  // true or false
},

注意: 定位权限返回为真并不意味着可以定位   需要进一步验证是否开启了定位  也就是手机里面的定位开关

安卓iOS的权限判断方法都是用 Promise 封装  使用方法一致   iOS 没有Error(catch)

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 准备工作 在开始打包之前需要准备一些工作,比如: - 确认应用的基本信息,包括应用名称、图标、版本号等; - 确认应用的证书,安卓需要签名证书,iOS需要开发者账号和证书; - 确认应用的权限和配置,包括网络权限、文件读写权限等; - 确认应用的代码和资源,包括Vue代码、静态资源等。 2. 打包Android应用 打包Android应用的流程如下: - 使用HBuilderX打开uni-app项目; - 选择“发行”-“原生App-Android”; - 配置应用基本信息,包括应用名称、图标、版本号等; - 配置应用的签名证书,如果没有证书需要创建一个; - 配置应用的权限和配置,包括网络权限、文件读写权限等; - 编译打包应用,生成APK文件; - 将APK文件上传到应用市场或进行其他发布方式。 3. 打包iOS应用 打包iOS应用的流程如下: - 使用HBuilderX打开uni-app项目; - 选择“发行”-“原生App-iOS”; - 配置应用基本信息,包括应用名称、图标、版本号等; - 配置应用的开发者账号和证书,如果没有需要注册一个; - 配置应用的权限和配置,包括网络权限、文件读写权限等; - 编译打包应用,生成IPA文件; - 将IPA文件上传到App Store或进行其他发布方式。 4. 上线应用 打包完成后,需要将应用上线到应用市场或App Store中,具体步骤如下: - 登录应用市场或App Store开发者中心; - 创建应用或在已有应用中上传新版本; - 填写应用信息,包括应用名称、描述、截图等; - 上传应用包,包括APK或IPA文件; - 等待应用审核,审核通过后应用即可上线。 以上是uniapp安卓ios打包上线的流程,需要注意的是,不同的应用市场和App Store可能会有不同的要求和流程,开发者需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值