微信小程序开发——小程序API获取用户位置及异常流处理完整示例

前言:

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

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

业务流程图:

关键技术点:

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

示例代码:

 1 const app = getApp()
 2 
 3 Page({
 4   data: {
 5     hiddenReAuthorizePop:true,//隐藏重新授权确认弹窗
 6     latitude: "", //维度,浮点数
 7     longitude: "", //经度,浮点数
 8     content:"本活动需要获取位置才可以参加"
 9   },
10   onLoad: function() {
11     //1. 页面加载的时候获取定位
12     this.getLocation()
13   },
14   /**
15    * 1. 获取用户定位
16    */
17   getLocation: function() {
18     var self = this;
19     wx.getLocation({
20       type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的坐标,可传入'gcj02'
21       altitude: true, //传入 true 会返回高度信息,由于获取高度需要较高精确度,会减慢接口返回速度
22       success: function(res) {
23         var latitude = res.latitude; // 纬度,浮点数
24         var longitude = res.longitude; // 经度,浮点数
25         self.setData({
26           latitude: res.latitude,
27           longitude: res.longitude
28         })
29       },
30       fail: function(res) {
31         //未授权就弹出弹窗提示用户重新授权
32         self.reAuthorize();          
33       }
34     });
35   },
36   /**
37    * 1.2 重新授权按钮点击事件
38    * click event   
39    */
40   openLocationSetting: function() {
41     var self = this
42     //先获取用户的当前设置,返回值中只会出现小程序已经向用户请求过的权限
43     wx.getSetting({
44       success: function(res) {
45         if (res.authSetting && !res.authSetting["scope.userLocation"]) {
46           //未授权则打开授权设置界面
47           wx.openSetting({
48             success: function(res) {              
49               if (res.authSetting && res.authSetting["scope.userLocation"]) {                
50                 //允许授权,则自动获取定位,并关闭二确弹窗,否则返回首页不处理
51                 self.getLocation();
52                 self.setData({
53                   hiddenReAuthorizePop:true
54                 })
55                 wx.showToast({
56                   title: '您已授权获取位置信息',
57                   icon: 'none'
58                 })
59               }else{
60                 //未授权就弹出弹窗提示用户重新授权      
61                 self.reAuthorize();
62               }
63             }
64           })
65         } else {
66           //授权则重新获取位置新(授权设置界面返回首页,首页授权二确弹窗未关闭)
67           self.getLocation();
68         }
69       }
70     })
71   },
72   /**
73    * 重新授权
74    */
75   reAuthorize:function(){
76     var self=this
77     self.setData({ hiddenReAuthorizePop:false})
78   }
79 })

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

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

posted on 2018-10-30 09:54  逍遥云天  阅读(6207)  评论(0编辑  收藏  举报

导航