项目用uniapp 的时候,有个功能是 拍照和相册。本来没啥问题,客户非要在提示使用权限的时候点击禁止,然后在点拍照就没提示了👍🙄
思路: 其实就是每次拍照和相册判断是否开启对应的权限
搜索到一位老哥的文章。ios 确实有这个权限列表的问题。
(68条消息) uniapp 安卓和ios权限获取uniapp ios 网络权限前端菜鸟丶Ndie的博客-CSDN博客
用它的方法解决完美了。不过本人自己优化了一下
使用该功能前一定要下载 官方的权限js文件permission.js
我是放到 utils 两个文件同级,放到哪个文件夹不是固定的
另外要注意自己用 vuex 或者 uni storage 存储一个 变量 用来判断 ios 是否第一次打开拍照或者相册
工具包
import permission from "./permission";
//手机权限,摄像头和图册
export function permissionCheck(){
return new Promise(async (resolve,reject)=>{
if(uni.getSystemInfoSync().platform === 'ios'){
const camera = permission.judgeIosPermission("camera");//判断ios是否给予摄像头权限
//ios相册没权限,系统会自动弹出授权框
//let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限
if(camera){
resolve();
}else{
reject('需要开启相机使用权限');
}
}else{
let camera = await permission.requestAndroidPermission("android.permission.CAMERA");//判断安卓是否给予摄像头权限
let photoLibrary = await permission.requestAndroidPermission("android.permission.READ_EXTERNAL_STORAGE");//判断安卓是否给予相册权限
if(camera == -1 || photoLibrary == -1){
reject('请同时开启相机和相册的使用权限');
}else{
resolve();
}
}
})
}
//跳转到手机开启权限的界面
export function phonePermissionSetting(){
permission.gotoAppPermissionSetting();
}
具体应用场景
import {permissionCheck,phonePermissionSetting} from '@/utils/phonePermissionCheck'
//选择照片
chooseImage(){
const callback = ()=>{
uni.chooseImage({
count: 1,
sourceType: ["camera"],
success: (res) => {
//选择成功
},
});
}
// #ifdef H5
callback()
// #endif
//由于ios的机制问题,只有用过该功能它的权限列表才会出现该权限的设置,ios调用第一次就可直接打开相机
// #ifndef H5
const iosFirstOpenCamera = //这里是获取vuex 或者 storage 存储的变量
if(uni.getSystemInfoSync().platform === 'ios' && iosFirstOpenCamera){
//把判断ios这个变量置为false
this.$vuex.commit('SET_IOS_FIRST_OPEN_CAMERA', false)
or uni.getStorage('xxx')
callback()
}else{
permissionCheck().then(res=>{
callback()
}).catch(err =>{
uni.showModal({
title: '手机权限',
content: err,
success: function (res) {
if (res.confirm) {
phonePermissionSetting()
} else if (res.cancel) {
}
}
});
})
}
// #endif
},
网友评论