uniapp中获取位置信息处理

在微信小程序中,获取定位,是需要用户授权的,那么当用户拒绝授权后,需要重新获取定位时,是不会再调起授权界面,这时需要用户主动打开设置界面,才可以重新开启授权权限;

那么,在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 (!isOpenSetting && typeof(settingRes.authSetting['scope.userLocation']) != 'undefined' && !settingRes.authSetting['scope.userLocation']) {uni.showModal({title: '需要授权获取您的位置信息',content: '你的位置信息将用于为您提供更合适您的服务',success: (data) => {if (data.confirm) {isOpenSetting = true;// 打开设置界面uni.openSetting({success: (response) => {if(response.authSetting['scope.userLocation']){console.log('重新授权获取位置信息-同意');// 重新获取定位getLocation((data)=>{callback({isOpenSetting:isOpenSetting,...data})});}else{console.log('重新授权获取位置信息-未同意');callback({isOpenSetting:isOpenSetting,latitude : '',longitude : '',})}},fail:()=>{console.log('openSetting接口调用失败的回调函数');}})} else if (data.cancel) {console.log('showModal接口:用户点击取消未打开设置界面');callback({isOpenSetting:isOpenSetting,latitude : '',longitude : '',})}},fail: function(){console.log('showModal接口:调用失败的回调函数');}});}else{// 重新获取定位getLocation((data)=>{callback({isOpenSetting:isOpenSetting,...data})});}}})
}/*** 获取位置*/
export function getLocation(callback){uni.getLocation({//type: 'wgs84',type: 'gcj02',success: (res)=>{console.log(res);callback({latitude : res.latitude,longitude : res.longitude,})},fail: (res)=>{console.log('用户拒绝授权获取位置信息,使用默认经纬度0 0');callback({latitude : '',longitude : '',})},complete: (res)=>{// console.log(res);// 根据位置数据更新页面数据}});
}

直接在页面中处理逻辑代码

需要获取位置代码处执行:

this.doGetLocation();

methods中处理方法:

methods: {// ......// 获取定位,兼容用户拒绝授权及相关处理(获取用户当前的授权状态 => 未同意授权位置时,引导用户打开设置界面,重新选择授权功能 => 允许后重新获取位置)doGetLocation(){this.isOpenSetting = false; // 是否打开设置界面// 获取用户当前的授权状态uni.getSetting({success: (settingRes) => {console.log(settingRes)console.log(this.isOpenSetting)// 判断用户未同意授权位置时,提示并引导用户去打开设置界面,用户可重新选择授权功能if (!this.isOpenSetting && typeof(settingRes.authSetting['scope.userLocation']) != 'undefined' && !settingRes.authSetting['scope.userLocation']) {uni.showModal({title: '需要授权获取您的位置信息',content: '你的位置信息将用于为您提供更合适您的服务',success: (data) => {if (data.confirm) {this.isOpenSetting = true;// 打开设置界面uni.openSetting({success: (response) => {if(response.authSetting['scope.userLocation']){console.log('重新授权获取位置信息-同意');// 重新获取定位this.getLocation();}else{console.log('重新授权获取位置信息-未同意');this.doGetLocationAfter({latitude : '',longitude : '',isOpenSetting : this.isOpenSetting,})}},fail:()=>{console.log('openSetting接口调用失败的回调函数');}})} else if (data.cancel) {console.log('showModal接口:用户点击取消未打开设置界面');this.doGetLocationAfter({latitude : '',longitude : '',isOpenSetting : this.isOpenSetting,})}},fail: function(){console.log('showModal接口:调用失败的回调函数');}});}else{// 重新获取定位this.getLocation();}}})},// 获取位置getLocation(){uni.getLocation({//type: 'wgs84',type: 'gcj02',success: (res)=>{console.log(res);this.doGetLocationAfter({latitude : res.latitude,longitude : res.longitude,isOpenSetting : this.isOpenSetting,})},fail: (res)=>{console.log('用户拒绝授权获取位置信息,使用默认经纬度0 0');this.doGetLocationAfter({latitude : '',longitude : '',isOpenSetting : this.isOpenSetting,})// 根据位置数据更新页面数据},complete: (res)=>{// console.log(res);// 根据位置数据更新页面数据}});},// 最终获取到的信息数据doGetLocationAfter(data){console.log(data)if(data.latitude != this.latitude || data.longitude != this.longitude){this.latitude = data.latitude;this.longitude = data.longitude;// 根据位置数据更新页面数据}else{console.log('位置信息无变化');}// 在这里处理最终获取到的信息数据},// ......
}

uniapp API文档

获取定位:


uni.getLocation(OBJECT) 获取当前的地理位置、速度
https://uniapp.dcloud.net.cn/api/location/location.html#getlocation

获取用户当前的授权状态:


uni.getSetting(OBJECT) 获取用户的当前设置。
https://uniapp.dcloud.net.cn/api/other/setting.html#getsetting

打开设置界面:


uni.openSetting(OBJECT) 调起客户端小程序设置界面,返回用户设置的操作结果。
https://uniapp.dcloud.net.cn/api/other/setting.html#opensetting

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL | 第一篇】undo log、redo log、bin log三者之间的区分?

undo log、redo log、bin log三者之间的区分? 从 产生的时间点、日志内容、用途 三方面展开论述即可 1.undo log——撤销日志 时间点:事务开始之前产生,根据当前版本的数据生成一个undo log,也保存在事务开始之前 作用&#xf…

PHP学习笔记2——前后端,mysql增删改查

php是一种适用于后端与前端的编程语言 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>index</t…

【亚马逊云新春特辑②】构生成式 AI 文生图工具之借助ControlNet进行AI绘画创作【生成艺术二维码】

文章目录 1.1 生成艺术二维码1&#xff09;制作基础二维码2&#xff09;确定艺术风格3&#xff09;生成艺术二维码4&#xff09;结果优化 AIGC 的可控性是它进入实际生产最关键的一环。在此之前&#xff0c;许多用户希望 AI 生成的结果尽可能符合要求&#xff0c;但都不尽如人意…

961. 最大获利(网络流,最小割,最大权闭合图)

活动 - AcWing 新的技术正冲击着手机通讯市场&#xff0c;对于各大运营商来说&#xff0c;这既是机遇&#xff0c;更是挑战。 THU 集团旗下的 CS&T 通讯公司在新一代通讯技术血战的前夜&#xff0c;需要做太多的准备工作&#xff0c;仅就站址选择一项&#xff0c;就需要完…

linux centos7.9改dns和ip

vi /etc/sysconfig/network-scripts/ifcfg-ens32 &#xff1a;wq后 重启网络服务 systemctl restart network —————————————————————————— 篇外话题 软件下载 xshell可以从腾讯软件中心下载

基于Rust语言,和WebAssembly技术,与JavaScript结合,的具体应用场景

基于Rust语言与WebAssembly&#xff08;Wasm&#xff09;技术并与JavaScript结合&#xff0c;可以应用于多个场景&#xff0c;特别是在需要高性能和/或低级系统访问的情况下。下面是一些具体的应用场景&#xff1a; 性能密集型任务: Rust加上Wasm适合执行计算密集型任务&#x…

笔记电商人工智能客服

天猫-店小蜜 标准模式 全自动接待&#xff1a;机器接待。若答不出&#xff0c;转人工引导语&#xff0c;顾客手动转人工。 智能辅助接待&#xff1a;机器人将辅助客服接待&#xff0c;在客服接待过程中提供话术推荐&#xff0c;并自动回复客服尚未接起的买家咨询。 混合接待…

在达梦DM8数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息

【问题描述】&#xff1a; 在 DM 达梦数据库的运行日志中出现大量 Failure occurs in data_recv_inet_once 警告信息&#xff0c;如下图&#xff1a; [WARNING] database P0000005986 T0000000000000022168 Failure occurs in data_recv_inet_once, code(13) len(32576, 0) [W…

使用 C++23 协程实现第一个 co_yield 同步风格调用接口--Qt计算排列组合

上一篇介绍了 co_await 的例子。与 co_await 类似&#xff0c;在C23的协程特性里&#xff0c; co_yield 用于从协程执行过程中暂停&#xff0c;并返回值。这个功能乍一听起来很奇怪&#xff0c;网上的例子大多是用一个计数器来演示多次中断协程函数&#xff0c;返回顺序的计数值…

【MySQL】DCL

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1. 管理用户 在MySQL数据库中&#xff0c;DCL&#xff08;数据控制语言&#xff09;是用来管理用户和权限的语句集合。通过DCL语句&#xff0c;可以创建、修改、删…

机器遗忘同等重要,AI如何忘记不良数据,保护用户隐私?

引言&#xff1a;大语言模型中的机器遗忘问题 在人工智能领域&#xff0c;大语言模型&#xff08;LLMs&#xff09;因其在文本生成、摘要、问答等任务中展现出的卓越能力而备受关注。然而&#xff0c;这些模型在训练过程中可能会记住大量数据&#xff0c;包括敏感或不当的信息…

数据分析(二):学生成绩预测分析报告

目录 摘要 一、引言 二、 数据源介绍 三、 数据清洗和预处理 3.1 缺失值处理 3.2 异常值处理 3.3 数据编码 四、 探索性数据分析 4.1 可视化相关统计量 4.2 目标数据的分布情况 4.3 Pearson 相关性分析 五、 特征工程 5.1 特征构造 5.1.1 总饮酒量 5.1.2 整体关…

使用空闲电脑免费搭建一个私人的网盘

如果你也有一台空闲电脑&#xff0c;可以使用它来搭建一个私人的网盘。 这里使用的是飞梦云网盘&#xff1b; 服务端&#xff1a;下载 服务器文件使用hash校验进行储存&#xff0c;实现重复上传的文件秒传功能。 Fuse4Ui&#xff08;虚拟分区工具&#xff09;&#xff1a;下…

GaN建模:强大但富有挑战性

来源&#xff1a;Modeling GaN: Powerful but Challenging&#xff08;10年&#xff09; 文章的研究内容 这篇文章主要研究了氮化镓&#xff08;GaN&#xff09;高电子迁移率晶体管&#xff08;HEMTs&#xff09;的建模问题。GaN HEMTs是微波频段高功率发射器设计中的关键技术…

java面试题基础篇,kafka与rabbitmq面试题

1. Java 堆空间 **发生频率&#xff1a;**5颗星 造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用&#xff0c;对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立刻回收。finalizer 由结束队列服务的守护线程调用&a…

C语言操作符优先顺序

以下是 C 语言中各种运算符的优先级&#xff0c;按照优先级从高到低的顺序列出&#xff1a; () : 圆括号&#xff0c;函数调用&#xff0c;强制类型转换[] : 数组下标-> : 结构体和共用体成员通过指针访问. : 结构体和共用体成员访问 -- : 自增、自减 - : 正、负号! ~ : 逻…

K8S常见的持久化(存储)方案用法详解

文章目录 1、k8s持久化存储&#xff1a;emptyDir 临时存储方案2、k8s持久化存储&#xff1a;hostPath3、k8s持久化存储&#xff1a;nfs1、搭建nfs服务2.创建Pod&#xff0c;挂载NFS共享出来的目录3.请求pod&#xff0c;看结果 4、k8s持久化存储&#xff1a; PVC4.1.1 k8s PV是什…

BOOT电路

本质&#xff1a;BOOT电路本质上是单片机的引脚 作用&#xff1a;BOOT电路的作用是用于确定单片机的启动模式 使用方法&#xff1a;在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。 原理&#xff1a;单片机上电或复位后会先启动内部晶振&a…

【C++进阶】哈希 + unordered系列容器

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

华为 OD 一面算法原题

2.2 亿彩票公布调查结果 昨天&#xff0c;闹得沸沸扬扬的《10 万中 2.2 亿》的彩票事件&#xff0c;迎来了官方公告。 简单来说&#xff0c;调查结果就是&#xff1a;一切正常&#xff0c;合规合法。 关于福利彩票事件&#xff0c;之前的推文我们已经分析过。 甚至在后面出现《…