当前位置:   article > 正文

uniapp 安卓和ios权限获取_platform == 'ios

platform == 'ios

最近用uniapp开发一个app,遇到一些权限问题,怎么说了,也是第一次一个人来开发完整的app,所以遇到很多以前没遇到过也没考虑过的问题,就做一个记录,同时也希望能对大家有点帮助,废话不多说

开发app的话,uniapp提供的获取权限的api就用不了了,所以大家可以直接去下面这个链接,这是uniapp官方推荐的权限获取插件,封装的挺好的

app权限获取插件链接
在这里插入图片描述

这个插件对安卓来说没什么问题,但在ios上会有一个问题,我在网上查找了一两天才知道原因

就拿我的做法来说,可能是我有点笨,我想调用相机拍照,我是先判断有没有调用相机的权限,如果没有就引导用户去权限列表设置,这在安卓手机上没有问题,但由于ios的机制问题,你只有用过该功能它的权限列表才会出现该权限的设置,而安卓的权限直接就在列表里

刚开始没有相机权限在这里插入图片描述

所以我们可以直接调用相机,第一次的话会有个系统提示框给用户,看他授不授权,他同不同意都没关系,因为这时候设置里的权限列表已经有了该功能,下次用户要用相机可以引导用户去设置里开启该权限了
在这里插入图片描述
然后设置里就有了相机这个权限了,后面即使他关了也可以引导他去设置了
在这里插入图片描述

封装获取相机和相册是否授权,以及跳转到权限设置页面(前提是引入了上文的那个插件)

//手机权限,摄像头和图册
phoneAuthority(){
	return new Promise(async (rel,rej)=>{
		var platform = this.globalData.platform;
		if(platform == 'ios'){
			let camera = permision.judgeIosPermission("camera");//判断ios是否给予摄像头权限
			//ios相册没权限,系统会自动弹出授权框
			//let photoLibrary = permision.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
			if(camera){
				rel();
			}else{
				rej('需要开启相机使用权限');
			}
		}else{
			let camera = await permision.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
			let photoLibrary = await permision.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
			if(camera == 0 || photoLibrary == 0){
				rej('请同时开启相机和相册的使用权限');
			}else if(camera == -1 || photoLibrary == -1){
				//永久拒绝
				rej(false)
			}else{
				rel();
			}
		}
	})
},
//跳转到手机开启权限的界面
permissionSetting(){
	permision.gotoAppPermissionSetting();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

使用页,platform是手机系统,可以通过API获取手机系统名称

//选取图片
selectImg(){
	const isIosTrue = uni.getStorageSync('iosFirstCamera');//是不是第一次开启相机
	//ios要先调用一下功能后,设置的权限列表里才会有该权限
	if(getApp().globalData.platform == 'ios' && isIosTrue !== 'false'){
		uni.setStorageSync('iosFirstCamera','false');//设为false就代表不是第一次开启相机
		uni.chooseImage({
		  count: 1, // 默认9
		  sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
		  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
		  success(res) {
			console.log('选取或者拍照');
		  }
		})
	}else{
		getApp().phoneAuthority().then(e =>{
			uni.chooseImage({
			  count: 1, // 默认9
			  sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
			  sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
			  success(res) {
				console.log('选取或者拍照');
			  }
			})
		}).catch(e =>{
			console.log(e);
		})
	}	
},
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

更多权限封装

// import {getCacheSync} from './cache.js'
//登录判断,没有第一个页面跳转登录页
// 拦截tabbar页面跳转
// uni.addInterceptor('switchTab', {
// 	invoke (e) {
// 		if (!getCacheSync('userInfo')) {
// 			uni.redirectTo({
// 				url: '/pages/login/index/index'
// 			});
// 			return false
// 		}else{
// 			return true
// 		}
// 	},
// 	success (e) {
// 		// console.log(e)
// 	}
// })

import permision from "@/js_sdk/wa-permission/permission.js"

/**
 * 获取手机摄像头和图册权限
 * */
const cameraAuthority = () =>{
	return new Promise(async (rel,rej)=>{
		var platform = getApp().globalData.mySystemInfo.osName || 'android';
		// console.log(platform)
		if(platform == 'ios'){
			let camera = permision.judgeIosPermission("camera");//判断ios是否给予摄像头权限
			//ios相册没权限,系统会自动弹出授权框
			//let photoLibrary = permision.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
			if(camera){
				rel();
			}else{
				rej('需要开启相机使用权限');
			}
		}else{
			let camera = await permision.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
			let photoLibrary = await permision.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
			if(camera == 0 || photoLibrary == 0){
				rej('请同时开启相机和相册的使用权限');
			}else if(camera == -1 || photoLibrary == -1){
				//永久拒绝
				rej(false)
			}else{
				rel();
			}
		}
	})
}

/**
 * 限安卓
 * 是否打开了手机定位
 * */
const adressOpen = () =>{
	return permision.checkSystemEnableLocation();
}

/**
 * 限安卓
 * 获取位置信息权限
 * */
const adressAuthority = () =>{
	return new Promise(async (rel,rej)=>{
		let adress = await permision.requestAndroidPermission("android.permission.ACCESS_FINE_LOCATION");//判断安卓是否有获取位置信息权限
		if(adress == 0){
			rej('请开启定位权限');
		}else if(adress == -1){
			//永久拒绝
			rej(false)
		}else{
			rel();
		}
	})
}

/**
 * 限安卓
 * 获取拨打电话权限
 * */
const cellPhoneAuthority = () =>{
	return new Promise(async (rel,rej)=>{
		let adress = await permision.requestAndroidPermission("android.permission.CALL_PHONE");//拨打电话权限
		if(adress == 0){
			rej('请开启拨打电话权限');
		}else if(adress == -1){
			//永久拒绝
			rej(false)
		}else{
			rel();
		}
	})
}

/**
 * 跳转到手机开启权限的界面
 * */
const permissionSetting = () =>{
	permision.gotoAppPermissionSetting();
}

export{
	cameraAuthority,
	permissionSetting,
	adressAuthority,
	adressOpen,
	cellPhoneAuthority
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/274454
推荐阅读
相关标签
  

闽ICP备14008679号