zoukankan      html  css  js  c++  java
  • 微信小程序开发——小程序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

  • 相关阅读:
    sqlserver把小数点后面多余的0去掉
    C#使用Linq对DataGridView进行模糊查找
    winform dataGridView DataGridViewComboBoxColumn 下拉框事件
    JGit与远程仓库链接使用的两种验证方式(ssh和https)
    Quartz不用配置文件配置启动
    SpringBoot之退出服务(exit)时调用自定义的销毁方法
    Java注解Annotation
    Java自定义数据验证注解Annotation
    我的ehcache笔记
    Java中泛型Class<T>、T与Class<?>
  • 原文地址:https://www.cnblogs.com/xyyt/p/9871898.html
Copyright © 2011-2022 走看看