在微信小程序中,获取定位,是需要用户授权的,那么当用户拒绝授权后,需要重新获取定位时,是不会再调起授权界面,这时需要用户主动打开设置界面,才可以重新开启授权权限;
那么,在uniapp中获取位置信息处理,要兼容用户同意授权、拒绝授权情况下,最终能成功获取到位置信息的,做以下处理:
处理逻辑
一、获取定位时,用户同意授权获取定位,得到位置信息;
第1步:获取用户当前的授权状态 =>
第2步:判断是同意授权位置时 =>
第3步:获取位置
二、获取定位时,用户拒绝授权获取定位的:
第1步:获取用户当前的授权状态 =>
第2步:判断是未同意授权位置时,引导用户打开设置界面,重新选择授权功能 =>
第3步:用户选择允许授权后
第4步:重新获取位置,得到位置信息
第3步:用户选择不允许授权后
第4步:可至第1步,继续重新获取位置
引用文件可多页面复用的处理逻辑代码
引用文件:
import { doGetLocation } from '@/utils/getLocation.js';
需要获取位置代码处执行:
doGetLocation((data)=>{
console.log(data);
})
getLocation.js:
// import { doGetLocation } from '@/utils/getLocation.js';
let isOpenSetting;
/**
* 获取定位,兼容用户拒绝授权及相关处理(获取用户当前的授权状态 => 未同意授权位置时,引导用户打开设置界面,重新选择授权功能 => 允许后重新获取位置)
*/
export function doGetLocation(callback){
isOpenSetting = false; // 是否打开设置界面
// 获取用户当前的授权状态
uni.getSetting({
success: (settingRes) => {
console.log(settingRes)
console.log(isOpenSetting)
// 判断用户未同意授权位置时,提示并引导用户去打开设置界面,用户可重新选择授权功能
if