uniapp-微信小程序定位(授权定位)

/**
 * 授权&定位
 */
export default {
    data() {
        return {
            isLocated: false // 是否定位成功
        }
    },
    methods: {
        /**
         * 获取经纬度并触发回调函数
         * @param {Function} successCb 获取成功回调
         * @param {Function} authDenyCb 获取失败回调
         */
        getLocation(successCb, authDenyCb) {
            const self = this
            uni.getLocation({
              type: 'wgs84', // 默认gps 坐标
              altitude: false, // 是否返回高度
              accuracy: 'best', // 精度值为20m
              success(res) {
                    successCb && successCb(res)
                    self.isLocated = true
              },
                fail(err) {
                if (
                  err.errMsg ===
                  'getLocation:fail 频繁调用会增加电量损耗,可考虑使用 wx.onLocationChange 监听地理位置变化'
                ) {
                  uni.showToast({
                    title: '请勿频繁定位',
                    icon: 'none'
                  })
                }
                if (err.errMsg === 'getLocation:fail auth deny') {
                  // 未授权
                    uni.showToast({ title: '无法定位,请重新获取位置信息', icon: 'none' })
                    authDenyCb && authDenyCb()
                    self.isLocated = false
                }
                if (err.errMsg === 'getLocation:fail:ERROR_NOCELL&WIFI_LOCATIONSWITCHOFF') {
                    uni.showModal({
                        content: '请开启手机定位服务',
                        showCancel: false
                    })
                }
              }
            })
        },
        /**
         * 重新授权并调用定位方法
         * @param {Function} successCb 授权成功回调
         * @param {Function} authDenyCb 授权失败回调
         */
        getAuthorize(successCb, authDenyCb) {
            uni.authorize({
              scope: 'scope.userLocation',
              success: () => {
                this.getLocation(successCb, authDenyCb)
              },
              fail: (err) => {
                err = err['errMsg']
                uni
                  .showModal({
                    content: '需要授权位置信息',
                    confirmText: '确认授权'
                  })
                  .then((res) => {
                    if (res[1]['confirm']) {
                      uni.openSetting({
                        success: (res) => {
                          if (res.authSetting['scope.userLocation']) {
                            // 授权成功
                            uni.showToast({
                              title: '授权成功',
                              icon: 'none'
                            })
                          } else {
                            // 未授权
                            uni.showToast({
                              title: '授权失败',
                              icon: 'none'
                            })
                          }
                          this.getLocation(successCb, authDenyCb)
                        }
                      })
                    }
                    if (res[1]['cancel']) {
                      // 取消授权
                      console.log('取消')
                      this.getLocation(successCb, authDenyCb)
                    }
                  })
              }
            })
          },
    }
}

你可能感兴趣的:(uni-app,微信小程序,javascript,小程序)