微信小程序获取地理位置失败原因及解决方案

article/2025/1/11 4:24:28

微信小程序获取用户地理位置失败的原因主要有3种情况:

1. 手机系统设置中地理位置未开启
2. 系统未给微信app授权
3. 用户未给小程序授权地理位置信息

所以需要继续完善下定位失败的处理逻辑。

1. 在获取地理位置信息失败后,首先判断用户手机系统定位服务是否开启 || 微信app是否有定位授权,两种情况任意一种不符合,显示地理位置获取失败状态;
2. 都符合的话调用uni.getLocation,success走成功的操作,fail表示未给小程序授权地理位置信息,显示地理位置获取失败状态;uni.openSetting打开设置,选择允许小程序授权。

涉及到一个关键点是,微信小程序判断手机有没有定位的方法
uni.getSystemInfo文档

//locationEnabled	地理位置的系统开关
//locationAuthorized	允许微信使用定位的开关
uni.getSystemInfo({success: (res) => {if (!res.locationEnabled || !res.locationAuthorized) {uni.showToast({title: '请确保手机系统定位已开启',icon: 'none',duration: 2000,})},})

获取地理位置失败显示效果图
在这里插入图片描述

具体代码如下:

封装tool.js

//位置授权
export function getAuthorize () {return new Promise((resolve, reject) => {uni.authorize({scope: 'scope.userLocation',success: () => {// 1 用户允许授权// 2 用户之前已经同意授权,则不会出现弹窗,直接返回成功//  以上两种情况都会进入到success回调中resolve() // 允许授权},fail: () => {// 1 用户拒绝授权// 2 用户之前拒绝了授权,此接口会直接进入失败回调//  以上两种情况都会进入到fail回调中reject() // 拒绝授权},})})
}

父组件html

<template><view><!-- 未开启定位时状态 --><notGps v-if="showNoGps" /><!-- 已开启定位时,正常显示页面 --><view v-else class="index_root"><view>页面内容</view></view></view>
</template>

父组件js

<script>
import { getAuthorize } from '@/utils/tool.js' //引入位置授权
import notGps from './component/notGps.vue' // 引入未开启定位子组件data() {return {showNoGps: false,},
onLoad(e) {uni.showLoading({title: '加载中',mask: true,})//位置授权getAuthorize() //用户允许小程序位置授权.then(() => {this.getSystemInfo()})//用户拒绝小程序位置授权.catch(() => {uni.hideLoading()this.getSystemInfo()})},
onShow() {if (this.showNoGps === true) {this.getSystemInfo()}}methods: {//获取手机系统信息getSystemInfo() {uni.getSystemInfo({success: (res) => {// 获取地理位置失败原因// 1.手机系统设置中地理位置未开启// 2.系统未给微信授权// 3.用户未给小程序授权地理位置信息if (!res.locationEnabled || !res.locationAuthorized) {uni.showToast({title: '请确保手机系统定位已开启',icon: 'none',duration: 2000,})this.showNoGps = true} else {this.getLocation()}},//先获取经纬度,然后再根据经纬度通过腾讯地图获取地址名称getLocation() {const that = thisuni.getLocation({type: 'gcj02',success(res) {// 成功进行的操作let longitude = res.longitudelet latitude = res.latitudegetAddress(longitude, latitude).then((res) => {let params = {city: res.result.address_component.city,name: res.result.address_reference.landmark_l2.title,lng: longitude,lat: latitude,}that.$store.commit('setLocation', params)// 获取定位成功,关闭获取地理位置失败显示效果that.showNoGps = falseuni.showLoading({title: '加载中',mask: true,})//请求接口获取页面数据that.getGoodsList()}).catch((e) => {console.log(e, '解释地址失败')})},fail(err) {// 到这里进入fail就只有情况3,用户未给小程序授权地理位置信息,显示获取地理位置失败显示效果console.log(err, '获取经纬度失败')that.showNoGps = true},})},})},}</script>

notGps组件

<template><view class="openGps"><image src="@/static/image/no_goods.png" class="empty-img"></image><view class="empty-txt">为给您提供最佳服务,小程序需要获取您的当前位置以定位您附近的商户</view><view class="handleBtn" @click="gotoLocation">点击开启定位</view></view>
</template><script>
export default {data() {return {}},methods: {//打开小程序授权地理位置设置,不管用户操作是否授权,返回父组件页面之后,都会触发onShow周期函数里的代码gotoLocation() {uni.openSetting({success(res) {console.log(res.authSetting)},})},},
}
</script><style lang="scss">
.openGps {text-align: center;padding: 400rpx 80rpx 0 80rpx;
}
.empty-img {width: 380rpx;height: 284rpx;
}
.empty-txt {font-size: 28rpx;color: #999;
}
.handleBtn {background: linear-gradient(-10deg, #00ca20, #02bb34);font-size: 20rux;color: #fff;font-weight: bold;width: 300upx;text-align: center;height: 70upx;line-height: 70upx;border-radius: 35upx;margin: 30upx auto;
}
</style>

可参考:
微信小程序拒绝定位之后 如何再次开启以及判断是否打开了系统定位功能
微信小程序获取地理位置,用户未开启手机定位时的解决方案


http://chatgpt.dhexx.cn/article/kvK8r5oC.shtml

相关文章

百度、高德、腾讯、天地图、谷歌、必应地图切片切图工具 MapCutter(旧名MapTiler),支持超大图、高清切片、webgl、leaflet、maptalk、openlayers、cesium等

# MapCutter MapCutter 是制作覆盖图/瓦片图/金字塔图/游戏地图/切图切片的工具&#xff0c;它支持百度、腾讯、高德、天地图、谷歌、必应地图、MapBox等地图服务&#xff0c;是市面上最易用的同类软件&#xff0c;并支持js、webgl、leaflet、maptalks、openlayers、cesium 等…

java获取输入的地点的经纬度和编码等信息

我的苦衷 对于不规则,无序的数据做数据清洗,使之可以在GIS地图上展示出来数据。在地图上展示出来倒是不难,难的是如何对这些不规则,无序的数据做数据清洗,拿到每个的经纬度呢? 原始数据分析 数据清洗后的数据都有公司名称,还有地点,能到区。那这个就好办了。 既然我…

视频教程-Web前端开发仿美团/饿了吗移动App之高德地图接口对接案例-JavaScript

Web前端开发仿美团/饿了吗移动App之高德地图接口对接案例 互联网编程行业10年开发和授课经验 曾任太极集团&#xff0c;外资企业等一线互联网python高级开发工程师 现任聚焦计算机技术有限公司项目组担任架构师及项目经理 精通&#xff1a;python/php/web前端开发技术以及unity…

大数据之数据清洗之爬取数据后如何根据地名或者公司名获取经纬度信息-地址逆解析经纬度

关于本文章说明: 本文章的想法来源于:爬了大量的数据后,想利用GIS技术把数据展示在地图上。但是爬的数据又没有经纬度坐标,就无法在地图上进行展示了,所以用了百度地图的正/逆地理编码。计算机行业招聘智能分析平台效果

微信小程序地图获取地点信息(打卡签到功能为例)-2020-7-26

目录 微信小程序地图获取地点信息(打卡签到功能为例) 效果图前提步骤 首先需要了解的代码部分 配置性代码功能性代码demo 下载 微信小程序地图获取地点信息(打卡签到功能为例) 解决方案&#xff1a;利用微信小程序的地图组件获取到用户的地理位置信息(经纬度)&#xff0c;再通过…

IOS高德地图逆地理编码定位+网络判断

先说下这功能的流程&#xff0c; 流程:判断用户是否联网--->获取用户地理位置经纬度--->通过经纬度去查询地理位置名称 //高德地图 property (nonatomic, strong) MAMapView *mapView;//高德地图 property (nonatomic, strong) AMapSearchAPI *search; property(nonatom…

如何制作专业的手绘地图(电子地图、智慧导览系统)

一、智慧导览系统介绍 手绘电子地图&#xff0c;就是把手绘地图覆盖到地图上&#xff0c;游客或者普通用户&#xff0c;可以在手机上通过地图的链接&#xff08;或者现在流行的小程序&#xff09;打开使用。是一种使用非常方便&#xff0c;集**“视、听、路径规划、实时导航”*…

js技术调用高德api实现精准定位

我先说下写这个程序的起因&#xff0c;昨天晚上我的一个朋友在淘宝上卖它玩了两年的光遇号。 号给淘宝商家了就不理人也不给钱了&#xff0c;因为没有订单记录淘宝官方不管。这种回收游戏账号的微信账号的十有九骗。在黑猫上就能查到各种回收账号的诈骗案件。 于是我给我朋友写…

vue + 高德精准定位(示例)

鱼弦:CSDN内容合伙人、CSDN新星导师、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen) 使用Vue和高德精准定位可以实现基于Vue框架的精准定位功能。下面是对该方法的原理、使用场景、文献材料链接以及当前使…

CocosCreator系列——接入高德地图sdk获取经纬度信息图文详解

CocosCreator接入高德地图sdk获取经纬度信息图文详解 先看效果 1.首先去 高德开放平台.申请key 接下来该获取发布版和调试版的SHA1了&#xff0c;首先打开cmd命令窗口 输入命令&#xff1a;cd .android(首先进入用户系统的安卓文件夹) 然后输入命令&#xff1a;keytool -li…

反应式编程框架设计:如何使得程序调用不阻塞等待

前言&#xff1a; 程序在高并发的情况下&#xff0c;程序容易崩溃。主要的原因是&#xff1a;在高并发的情况下&#xff0c;有大量用户请求需要程序计算处理&#xff0c;而目前的处理方式是&#xff0c;为每个用户请求分配一个线程&#xff0c;当程序内部因为访问数据库等原因…

TensorFlow编程框架基础

一、为什么要使用编程框架 深度学习的算法具有多层结构&#xff0c;每层的运算由一些基本操作构成&#xff0c;这些基本操作中存在大量共性运算&#xff0c;如卷积、池化、激活等。 将这些共性运算操作封装起来&#xff0c;可以提高编程实现效率。 面向这些封装起来的操作&am…

c语言编程框架_编程语言和框架的状态

c语言编程框架 作为专业的软件交付人员&#xff0c;我喜欢掌握技术趋势和“市场可能走向何方”。 在过去的十五年中&#xff0c;已经出现了许多语言和框架&#xff0c;并且几乎没有任何真正的持久力。 为了在“人们想知道的事情”上适销对路&#xff0c;使我知识广博&#xff0…

MFC编程框架总结

简介 MFC是一种C类库&#xff0c;利用面向对象的方法封装了Windows API&#xff0c;为Windows应用程序的开发带来了极大便利。本文总结了使用MFC进行编程的基本方法&#xff0c;编程环境为VS2008 SP1。 搭建MFC开发环境 由于使用MFC应用程序向导后VS会自动生成应用程序框架&am…

并发编程框架----disruptor框架(一)

背景 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列&#xff0c;研发的初衷是解决内存队列的延迟问题&#xff08;在性能测试中发现竟然与I/O操作处于同样的数量级&#xff09;。基于Disruptor开发的系统单线程能支撑每秒600万订单&#xff0c;2010年在QCon演讲后&…

网络编程框架

网络编程 Socket网络通信编程 Socket主要解决一个网间进程通信&#xff08;不同主机进程间的相互通信问题&#xff09;。 提供进程通信的端点&#xff0c;一个程序将一段信息写入Socket中&#xff0c;该Socket将这段信息发送给另外一个Socket中&#xff0c;使这段信息能传送到…

您所应了解的Python四大主流网络编程框架

**本文内容摘录自《Python高效开发实战——Django、Tornado、Flask、Twisted》一书。**该书分为三部分&#xff1a;第1部分是基础篇&#xff0c;带领初学者实践Python开发环境和掌握基本语法&#xff0c;同时对网络协议、Web客户端技术、数据库建模编程等网络编程基础深入浅出地…

常见编程/框架介绍

文章大纲 一、C/C二、C#三、cocos2d-x四、go语言五、Hadoop六、HBase七、PHP八、python九、Spark十、Storm十一、Unity3D十二、Java十三、Android十四、Object-C与swift十五、.NET十六、R语言 一、C/C 1. 简介 C语言是目前世界上流行、使用最广泛的高级程序设计语言。C语言对操…

Linux 应用编程框架

粗略的复习下linux应用编程的一些知识&#xff0c;画个导图记录总结下&#xff1a;