微信小程序获取地理位置失败原因及解决方案
微信小程序获取用户地理位置失败的原因主要有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>
可参考:
微信小程序拒绝定位之后 如何再次开启以及判断是否打开了系统定位功能
微信小程序获取地理位置,用户未开启手机定位时的解决方案
微信小程序获取地理位置失败原因及解决方案相关推荐
- 微信小程序获取地理位置失败
微信小程序获取地理位置失败 手机定位服务 ==> 微信定位服务 ==> 小程序定位服务(级别由高到低) 当关闭手机定位服务或微信定位服务时,小程序的获取定位服务会失败 wx.getloca ...
- 微信小程序获取openid失败
解决微信小程序获取openid失败问题 安装node https://nodejs.org/en/download/ 右键云函数,在内建终端打开 npm install --save wx-serve ...
- uni-app微信小程序获取手机号;微信小程序获取手机号,获取到后需要进行解密;微信小程序获取手机号失败 Error:该appId没有权限
方法1.uni-app登录加获取手机号解密-直接看此篇即可解决 微信小程序获取手机号注意点: 1.需要先登录,微信小程序登录看这篇 2.手机号获取到时加密的,需要后端解密或者前端自己解密(解密时候就会 ...
- 微信小程序获取地理位置,用户未开启手机定位时的解决方案
要点:获取地理位置时,如果获取地理位置失败,有两种情况: 1.用户未给小程序授权地理位置信息 2.系统设置中-隐私选项地理位置未开启或系统未给微信授权地理位置信息 在获取地理位置信息失败后,判断用户是 ...
- php根据地理位置签到,微信小程序获取地理位置实现定位签到功能
为了保证签到定位的精确性,要求开启GPS定位.小程序成功精确获取地理位置打卡签到,需要三步授权验证: 地理位置的系统开关(系统GPS开关是否打开) --系统级 允许微信使用定位的开关 (微信是否有获取 ...
- 微信小程序 获取地理位置使用
微信小程序 现在 的 地图定位是需要申请的.import amapFile from "../../common/amap-wx.130"; // 引入微信地图的SDK getLo ...
- 微信小程序获取地理位置信息
// pages/list/list.js Page({/*** 页面的初始数据*/data: {nation: '',province: '',city: '',district: '',stree ...
- 微信小程序 获取地理位置(显示地图并显示经纬度)
今天来说一下怎么显示地图并获取经纬度(获取到经纬度后显示地图) 首先我们先创建一个项目结构如下 我们先来看一下wxml代码 <view class="container log-lis ...
- 微信小程序获取经纬度有偏差的解决方案,
获取到经纬度后发现于实际经纬度有偏差,故把获取到的经纬度减去实际的经纬度得到差. 经度 (res.longitude + 0.01155) 纬度+ (res.latitude + 0.003282), ...
最新文章
- 神经网络无法区分异同,而且这个缺陷是本质性的
- netty框架_Netty实战:设计一个IM框架
- C. 防止E-mail注入
- 蓝桥杯 试题 入门训练 序列求和——6行代码AC
- C#_TextBox_禁止粘贴
- 【java进阶之路】(并发编程篇)1.Java线程
- datax因为脏数据降速问题解决
- kuwo.php源码,酷我音乐官方flash播放器调用代码
- 大学计算机基础技能论文,计算机基础论文,关于关于大学计算机基础教学相关参考文献资料-免费论文范文...
- Linux安装glassfish、利用glassfish部署应用
- Serverless Job—— 传统任务新变革
- 网易云音乐:从刷屏 IP 到音乐生活王国
- Java时间日期类处理(LocalDateTime、LocalDate相关操作、获取周几、工作日休息日节假日判定)
- 祝贺!中国战队EDG夺冠
- 基于React、Typescript和Solidity的NFT完整教程
- 如何在 Linux 中使用 Calibre 将 PDF 文件转换为 EPUB 格式?
- 堡垒主机有什么用?看了这篇博客你就懂了。
- gms认证流程_GMS认证流程及周期 智能手机和平板GMS授权
- Unity UI xlua 热更:还原塞尔达旷野之息 (持续更新:已补充箭头动效)
- win10+python3.6+百度AI——实现人脸识别