微信小程序获取用户地理位置失败的原因主要有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>

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

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

  1. 微信小程序获取地理位置失败

    微信小程序获取地理位置失败 手机定位服务 ==> 微信定位服务 ==> 小程序定位服务(级别由高到低) 当关闭手机定位服务或微信定位服务时,小程序的获取定位服务会失败 wx.getloca ...

  2. 微信小程序获取openid失败

    解决微信小程序获取openid失败问题 安装node https://nodejs.org/en/download/ 右键云函数,在内建终端打开 npm install --save wx-serve ...

  3. uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限

    方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...

  4. 微信小程序获取地理位置,用户未开启手机定位时的解决方案

    要点:获取地理位置时,如果获取地理位置失败,有两种情况: 1.用户未给小程序授权地理位置信息 2.系统设置中-隐私选项地理位置未开启或系统未给微信授权地理位置信息 在获取地理位置信息失败后,判断用户是 ...

  5. php根据地理位置签到,微信小程序获取地理位置实现定位签到功能

    为了保证签到定位的精确性,要求开启GPS定位.小程序成功精确获取地理位置打卡签到,需要三步授权验证: 地理位置的系统开关(系统GPS开关是否打开) --系统级 允许微信使用定位的开关 (微信是否有获取 ...

  6. 微信小程序 获取地理位置使用

    微信小程序 现在 的 地图定位是需要申请的.import amapFile from "../../common/amap-wx.130"; // 引入微信地图的SDK getLo ...

  7. 微信小程序获取地理位置信息

    // pages/list/list.js Page({/*** 页面的初始数据*/data: {nation: '',province: '',city: '',district: '',stree ...

  8. ​微信小程序 获取地理位置(显示地图并显示经纬度)​

    今天来说一下怎么显示地图并获取经纬度(获取到经纬度后显示地图) 首先我们先创建一个项目结构如下 我们先来看一下wxml代码 <view class="container log-lis ...

  9. 微信小程序获取经纬度有偏差的解决方案,

    获取到经纬度后发现于实际经纬度有偏差,故把获取到的经纬度减去实际的经纬度得到差. 经度 (res.longitude + 0.01155) 纬度+ (res.latitude + 0.003282), ...

最新文章

  1. 神经网络无法区分异同,而且这个缺陷是本质性的
  2. netty框架_Netty实战:设计一个IM框架
  3. C. 防止E-mail注入
  4. 蓝桥杯 试题 入门训练 序列求和——6行代码AC
  5. C#_TextBox_禁止粘贴
  6. 【java进阶之路】(并发编程篇)1.Java线程
  7. datax因为脏数据降速问题解决
  8. kuwo.php源码,酷我音乐官方flash播放器调用代码
  9. 大学计算机基础技能论文,计算机基础论文,关于关于大学计算机基础教学相关参考文献资料-免费论文范文...
  10. Linux安装glassfish、利用glassfish部署应用
  11. Serverless Job—— 传统任务新变革
  12. 网易云音乐:从刷屏 IP 到音乐生活王国
  13. Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)
  14. 祝贺!中国战队EDG夺冠
  15. 基于React、Typescript和Solidity的NFT完整教程
  16. 如何在 Linux 中使用 Calibre 将 PDF 文件转换为 EPUB 格式?
  17. 堡垒主机有什么用?看了这篇博客你就懂了。
  18. gms认证流程_GMS认证流程及周期 智能手机和平板GMS授权
  19. Unity UI xlua 热更:还原塞尔达旷野之息 (持续更新:已补充箭头动效)
  20. win10+python3.6+百度AI——实现人脸识别

热门文章

  1. 最长公共子序列c++实现
  2. 【开源】STC8G2K64S4开发板
  3. 机械师F117毒药 评测怎么样
  4. linux 我的世界 跨平台联机,《我的世界》将支持跨平台联机
  5. 【悲观锁 VS 乐观锁】
  6. 初学 爬取豆瓣哪吒之魔童降世短评
  7. 夏天热过了,冬天就不会冷了
  8. android 抛物线曲线,Android 属性动画实现抛物线动画
  9. Codeforces Round 855 (Div. 3)(A~F)
  10. java数组去重_Java数组去重的方法