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

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/xyyt/p/9871898.html
Copyright © 2011-2022 走看看