uniapp carema授权拒绝后重新拉取授权

问题描述:uniapp 获取用户权限的时候 如果不小心点击了取消权限就会发现,第二次无论怎么点击都无法重新拉起授权界面的按钮;

在这里插入图片描述

解决方法:拒绝授权后就必须进入设置中开启授权,使用openSetting函数就可;

但是如果你直接在外部(authorize函数得外部)调用openSetting函数 你会发现进入的设置的界面里 没有你需要的重新打开的权限 !!!这里就是一个则恶心的坑!反正我是搞了老半天才发现的 openSetting拉起设置界面打开某一项拒绝授权的权限时,必须在拉起这项权限的 authorize 函数中的 fail 函数 中使用openSetting函数,且使用这个函数也必须使用一个confirm 方法进行包裹提示(官方解释:用户发生点击行为后,才可以跳转打开设置页,管理授权信息)!!




看 ↓ ↓ ↓ ↓ ↓ ↓在这里插入图片描述





我这里是获取的carema权限为例;其他权限参考如下:

在这里插入图片描述

代码如下

pullAuth() {
    
    
			let that=this;
			// 读取 小程序已经授权的权限
			uni.getSetting({
    
    
				success(res) {
    
    
					// 判断是否拥有此权限进行拉起授权  和 重新授权功能
					if (!res.authSetting['scope.camera']) {
    
    
						// 未授权此项权限 拉起授界面
						uni.authorize({
    
    
							scope: 'scope.camera',
							success() {
    
    
								// 授权成功后 就可以执行 需要权限的  操作函数了
								//在这里可以进行一些操作
								// 使用已授权的功能
								uni.showToast({
    
    
									title: '可以使用相机权限',
									icon: 'success'
								});
								
								that.ass=true
							},
							fail(err) {
    
    
								/*
								 第一次拒绝授权后必须在 uni.authorize的fail中使用
								 uni.openSetting 才能进入设置界面打开授权按钮
								 */
								uni.showToast({
    
    
									title: '拒绝授权',
									icon: 'none'
								});
								// 这里必须经过一个confirm 不然也会出现问题(啥问题我也不知道)
								uni.showModal({
    
    
									title: '是否重新授权相机权限',
									success(res) {
    
    
										if (res.confirm) {
    
    
											uni.openSetting({
    
    
												success() {
    
    
													console.log('开启权限成功');
													that.ass=true
												},
												fail() {
    
    
													console.log('开启权限失败');
												}
											});
										} else if (res.cancel) {
    
    
											console.log('拒绝开启开启权限');
										}
									}
								});
							}
						});
					} else {
    
    
						//在这里调用uni.saveImageToPhotosAlbum(OBJECT)
						// 使用已授权的功能
						uni.showToast({
    
    
							title: '已经授权系统相机权限'
						});
						
						that.ass=true
					}
				}
			});
		}

至此。授权好了;但是我从授权设置页面返回我的相机组件页面;授权我已经打开了;我发现相机还是没有开启

在这里插入图片描述

我就怀疑这个相机组件已经加载过一次了;刚开始是未授权的时候加载的,那我从授权设置页面返回的时候再加载一次组件,通过v-if来判断; uni.openSetting:调起客户端小程序设置界面,返回用户设置的操作结果。

先看我相机代码:

<template>
	<view class="wrap">
		<view class="main">
		//注意这个ass变量
			<view :class="bgSwitch?'row2':'row2_active'" v-if="ass">
				<camera device-position="front" flash="off" @error="error"
					style="width: 100%; height: 300px;borderRadius: 100%;" class="frameMap"	></camera>
			</view>
		</view>
	</view>
</template>

export default {
    
    
		data() {
    
    
			return {
    
    
				ass:false
			}
		},
		onLoad() {
    
    
			this.pullAuth()
		},
}

最后就ok了。

猜你喜欢

转载自blog.csdn.net/qq_48850466/article/details/132450917