微信小程序开发——小程序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
个人原创博客,转载请注明来源地址:https://www.cnblogs.com/xyyt