前言:

小程序需要添加一个定位功能,主要的就是获取用户位置的经纬度,然后根据用户经纬度进行一些判断操作。

在小程序提供的Api中,获取用户定位信息的主要Api是 wx.getLocation(obj) 。但是使用这个API,会先获取用户授权。如果用户取消授权,那么再调这个Api,也不会再出现授权页面,也就不能再获取用户位置了,这就需要使用其他的Api辅助打开授权页面了。所以获取用户位置就需要完整的授权、获取位置的流程及异常流处理了。

业务流程图:

关键技术点:

页面加载默认调用 wx.getLocation ,然后如果获取失败则调用 wx.getSetting ,如果未授权,则调用 wx.openSetting 打开授权设置界面,如果授权界面设置允许授权,则返回页面再次调用 wx.getLocation,主要的流程就是这个了。

示例代码:

 const app = getApp()

 Page({
data: {
hiddenReAuthorizePop:true,//隐藏重新授权确认弹窗
latitude: "", //维度,浮点数
longitude: "", //经度,浮点数
content:"本活动需要获取位置才可以参加"
},
onLoad: function() {
//1. 页面加载的时候获取定位
this.getLocation()
},
/**
* 1. 获取用户定位
*/
getLocation: function() {
var self = this;
wx.getLocation({
type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的坐标,可传入'gcj02'
altitude: true, //传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度
success: function(res) {
var latitude = res.latitude; // 纬度,浮点数
var longitude = res.longitude; // 经度,浮点数
self.setData({
latitude: res.latitude,
longitude: res.longitude
})
},
fail: function(res) {
//未授权就弹出弹窗提示用户重新授权
self.reAuthorize();
}
});
},
/**
* 1.2 重新授权按钮点击事件
* click event
*/
openLocationSetting: function() {
var self = this
//先获取用户的当前设置,返回值中只会出现小程序已经向用户请求过的权限
wx.getSetting({
success: function(res) {
if (res.authSetting && !res.authSetting["scope.userLocation"]) {
//未授权则打开授权设置界面
wx.openSetting({
success: function(res) {
if (res.authSetting && res.authSetting["scope.userLocation"]) {
//允许授权,则自动获取定位,并关闭二确弹窗,否则返回首页不处理
self.getLocation();
self.setData({
hiddenReAuthorizePop:true
})
wx.showToast({
title: '您已授权获取位置信息',
icon: 'none'
})
}else{
//未授权就弹出弹窗提示用户重新授权
self.reAuthorize();
}
}
})
} else {
//授权则重新获取位置新(授权设置界面返回首页,首页授权二确弹窗未关闭)
self.getLocation();
}
}
})
},
/**
* 重新授权
*/
reAuthorize:function(){
var self=this
self.setData({ hiddenReAuthorizePop:false})
}
})

代码片段地址:https://developers.weixin.qq.com/s/uRMylxmO7e3Q

原创专业博客,转载请注明来源地址:https://www.cnblogs.com/xyyt/p/9871898.html

微信小程序开发——小程序API获取用户位置及异常流处理完整示例的更多相关文章

  1. 通过腾讯地图api获取用户位置限制在指定位置区域

    <!--在微信中获取用户位置--><script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js">& ...

  2. 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返 ...

  3. mpvue小程序开发之 wx.getUserInfo获取用户信息授权

    一.背景 在使用美团的mpvue2.0框架搭建起小程序项目后,做获取用户信息时遇到一些问题:微信小程序更新api后,获取用户信息只能通过button上的绑定方法 来获取用户信息,vue上方法绑定不能直 ...

  4. 微信公众号开发(三)获取access_token

    微信公众号开发(三)获取access_token 1.说明 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.acce ...

  5. Ceph Object Gateway Admin api 获取用户列表问题

    按照官方文档使用Admin Ops API 获取用户列表 GET /admin/user时 返回{code: 403, message: Forbidden}这里有两个问题:首先用户列表的请求为 如下 ...

  6. HTML5调用百度地图API获取当前位置并直接导航目的地的方法

    <!DOCTYPE html> <html lang="zh-cmn-Hans">     <meta charset="UTF-8&quo ...

  7. HTML5页面直接调用百度地图API,获取当前位置,直接导航目的地

    <!DOCTYPE html> <html lang="zh-cmn-Hans"> <meta charset="UTF-8"&g ...

  8. 微信小程序维护登录态与获取用户信息

    前言. 微信小程序的运行环境不是在浏览器下运行的.所以不能以cookie来维护登录态.下面我就来说说我根据官方给出的方法来写出的维护登录态的方法吧. 一.登录态维护 官方的文档地址:https://m ...

  9. 微信小程序开发01-小程序的执行流程是怎么样的?

    前言 我们这边最近一直在做基础服务,这一切都是为了完善技术体系,这里对于前端来说便是我们需要做一个Hybrid体系,如果做App,React Native也是不错的选择,但是一定要有完善的分层: ① ...

随机推荐

  1. ubuntu交换Caps 和 ESC

    https://askubuntu.com/questions/363346/how-to-permanently-switch-caps-lock-and-esc This will allow y ...

  2. 优秀的 Go 存储开源项目和库

    可以看到,今年谷歌家的 Go 编程语言流行度有着惊人的上升趋势,其发展也是越来越好,因此本文整理了一些优秀的 Go 存储相关开源项目和库,一起分享,一起学习. 存储服务器(Storage Server ...

  3. python流程控制for循环

    流程控制 for循环 #首先我们用一例子看下用while循环取出列表中值的方法 l=['a','b','c'] i=0 while i<len(l): print(l[i]) i+=1 #whi ...

  4. ReactiveX 学习笔记(3)转换数据流

    Transforming Observables 本文的主题为转换 Observable 的操作符. 这里的 Observable 实质上是可观察的数据流. RxJava操作符(二)Transform ...

  5. 【382】利用 namedtuple 实现函数添加属性

    namedtuple 能够实现类似类的效果,tuple 的元素可以通过属性的形式返回,如下所示: from collections import namedtuple Student = namedt ...

  6. ajaxfileupload.js上传文件兼容IE7及以上版本

    要兼容IE789,要修改ajaxfileupload.js;要将此处的代码替换掉 if(window.ActiveXObject) { var io = document.createElement( ...

  7. python 装饰器、递归原理、模块导入方式

    1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...

  8. sql server连接字符串与tcp/ip开启

    连接字符串1:Data Source=localhost,1433;User ID=sa;Password=123;Initial Catalog=test;Min Pool Size=1;Max P ...

  9. C# 图像处理:将图像(24位真彩)转为 8位灰度图像 采用了内存法,大大提高了效率

    /// <summary> /// 将源图像灰度化,并转化为8位灰度图像. /// </summary> /// <param name="original&q ...

  10. hibernate 工作原理及为什么要用