uniapp开发微信小程序,选择地理位置uni.chooseLocation

news2024/11/16 13:37:01
<view @click="toCommunity">点击选择位置</view>
    toCommunity() {
      const that = this
      uni.getSetting({
        success: (res) => {
          const status = res.authSetting
          // 如果当前设置是:不允许,则需要弹框提醒客户,需要前往设置页面打开授权
          if(!status['scope.userLocation']) {
            uni.showModal({
              title: "是否授权当前位置",
              content: "需要获取您的地理位置,请确认授权,否则地图功能将无法使用",
              success: (tip) => {
                if (tip.confirm) {
                  // 如果已经拒绝过,则需要打开设置页面,授权弹框不会弹出第二次,因为已经明确拒绝/确认过了(微信的原因)
                  if (that.isDeny) {
                    wx.openSetting({
                      success: function(res) {
                        // 在设置页面授权成功后再次获取位置信息
                        uni.showToast({
                          title: "授权成功",
                        })
                        that.isDeny = false
                        // 修改授权后返回页面,弹框消失,需要再点一次
                      },
                      fail: (data) => {
                        console.log(data)
                        // isDeny 是否拒绝过授权,如果拒绝过,再点击按钮的话,弹框确认后就直接打开微信小程序设置页
                        that.isDeny = true
                      }
                    })
                    return
                  }
                  // 如果点击了确认,并且没有拒绝过微信系统授权弹框,则会弹出授权位置信息的弹框
                  uni.authorize({
                    scope: "scope.userLocation",
                    success: (data) => {
                      // 授权弹框点击确认
                      console.log(data)
                      // 如果用户同意授权,则打开授权设置页面,判断用户的操作
                      uni.openSetting({
                        success: (data) => {
                          // 如果用户授权了地理信息在,则提示授权成功
                          if (data.authSetting['scope.userLocation'] === true) {
                            uni.showToast({
                              title: "授权成功",
                              icon: "none",
                              duration: 1000
                            })
                          }
                        }
                      })
                    },
                    fail: (data) => {
                      // 如果用户拒绝授权,则提示用户需要授权
                      uni.showToast({
                        title: "您已拒绝授权,请重新授权",
                        icon: "none",
                        duration: 1000
                      })
                      that.isDeny = true
                    }
                  })
                }
              }
            })
          } else {
            uni.chooseLocation({
              success: (res) => {
                that.formData.village = res.name
                that.formData.address = res.address
                that.formData.longitude = res.longitude
                that.formData.latitude = res.latitude
                const map = new amapFile.AMapWX({
                  key: 'f037f0a9966f01339818bbe2ec1c6495',
                })
                map.getRegeo({
                  location: res.longitude + ',' + res.latitude,
                  success: (data) => {
                    this.formData.sheng = data[0].regeocodeData.addressComponent.province
                    this.formData.shi = data[0].regeocodeData.addressComponent.city
                    this.formData.qu = data[0].regeocodeData.addressComponent.district
                  },
                })
              },
              fail: () => {
              }
            })
          }
        },
        fail: () => {
          that.isDeny = true
        },
      })
    },

在这里插入图片描述

下方列表可以选择地址,选择后点击右上角完成,会返回页面

在这里插入图片描述

    toCommunity() {
 	  uni.getSetting({
        success: function(res) {
          if (!res.authSetting['scope.userLocation']) { // 如果没有授权定位
            if (that.isFirstTime) { // 如果是第一次尝试
              // 弹出提示框询问用户是否授权
              uni.showModal({
                title: '提示',
                content: '需要获取您的地理位置信息',
                success: function(modalRes) {
                  if (modalRes.confirm) {
                    // 用户点击了确认,尝试请求授权
                    uni.authorize({
                      scope: 'scope.userLocation',
                      success: function() {
                        // 授权成功,调用openMap方法
                        that.openMap()
                      },
                      fail: function() {
                        // 授权失败,可能是用户拒绝了,此时可以打开设置页面
                        that.openSetting()
                      }
                    })
                  }
                }
              })

              that.$store.commit('updateIsFirstTime', false) // 更新为已尝试授权
            } else {
              // 用户之前已经拒绝过授权,直接打开设置页面
              that.openSetting()
            }
          } else {
            // 已经授权,直接调用openMap方法
            that.openMap()
          }
        },
        fail: function(err) {
          // 获取设置失败的处理
          console.error('获取用户设置失败:', err)
        }
      })
    },
    openSetting() {
      // 打开设置页面
      uni.openSetting({
        success: function(res) {
          if (res.authSetting['scope.userLocation']) {
            // 用户在设置页面打开了定位权限
            this.openMap()
          }
        },
        fail: function(err) {
          // 打开设置页面失败的处理
          console.error('打开设置页面失败:', err)
        }
      })
    },
    openMap() {
      uni.chooseLocation({
        success: (res) => {
          console.log('用户选择的地址:', res)
          this.formData.village = res.name
          this.formData.address = res.address
          this.formData.longitude = res.longitude
          this.formData.latitude = res.latitude
          const map = new amapFile.AMapWX({
            key: 'f037f0a9966f01339818bbe2ec1c6495',
          })
          map.getRegeo({
            location: res.longitude + ',' + res.latitude,
            success: (data) => {
              this.formData.sheng = data[0].regeocodeData.addressComponent.province
              this.formData.shi = data[0].regeocodeData.addressComponent.city
              this.formData.qu = data[0].regeocodeData.addressComponent.district
            },
          })
        },
        fail: (err) => {
          console.log('选择位置失败:', err)
        }
      })
    },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1663083.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

清空回收站是彻底删除吗?一文解答你的疑问!

“我刚刚本来想在回收站中恢复一个文件的&#xff0c;但是一不小心就清空了回收站&#xff0c;想问问清空回收站是彻底删除吗&#xff1f;清空了回收站文件还有机会找回吗&#xff1f;” 在使用电脑的过程中&#xff0c;我们经常会将不再需要的文件或文件夹移动到回收站&#x…

动态IP避坑指南,怎样挑选合适的动态IP?

在现今这个数字化、网络化的时代&#xff0c;动态IP的使用越来越广泛&#xff0c;无论是为了保护网络安全、提高网络访问速度&#xff0c;还是为了实现某些特定的网络功能&#xff0c;动态IP都发挥着不可或缺的作用。然而&#xff0c;如何挑选一个合适的动态IP&#xff0c;避免…

【二叉树】Leetcode 二叉树的锯齿形层序遍历

题目讲解 103. 二叉树的锯齿形层序遍历 算法讲解 这道题其实是和N叉树层序遍历是一样的&#xff0c;只不过是要求每一次的遍历的方向不一样&#xff1b;注意&#xff1a;这一次的使用的队列不能够是queue了&#xff0c;因为需要从后往前遍历容器&#xff0c;所以就可以使用v…

fswatch工具:跟踪Linux中的文件和目录更改

fswatch是一个跨平台的文件更改监视器&#xff0c;当指定文件或目录的内容被更改或修改时&#xff0c;它会收到通知警报。 fswatch在不同的操作系统上执行多种类型的监视器&#xff0c;例如&#xff1a; 基于 Apple OS X 的文件系统事件 API 构建的监视器。基于kqueue的监视器…

【JAVA进阶篇教学】第十二篇:Java中ReentrantReadWriteLock锁讲解

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十二篇&#xff1a;Java中ReentrantReadWriteLock锁讲解。 在并发编程中&#xff0c;读写锁&#xff08;ReadWriteLock&#xff09;是一种用于管理对共享资源的访问的锁机制&#xff0c;它提供了比传统的互斥锁更高的…

解读计数器算法:原理、Java实现与优劣分析

计数器算法的介绍 计数器算法的基本原理是通过一个计数器来记录事件的发生次数。每当一个特定的事件发生时&#xff0c;计数器的值就会增加一。当需要检查这个事件发生的次数时&#xff0c;只需要查看计数器的当前值即可。这种方法简单直观&#xff0c;易于理解和实现。 想象…

软件检测中的CNAS认证是什么?

CNAS认证机构&#xff0c;全称“中国合格评定国家认可委员会”&#xff08;China National Accreditation Service for Conformity Assessment&#xff09;&#xff0c;是由国家认证认可监督管理委员会&#xff08;CNCA&#xff09;批准设立并授权的国家认可机构。该机构负责统…

深度解读《深度探索C++对象模型》之拷贝构造函数(二)

目录 含有虚函数的情形 继承链上有virtual base class的情形 抑制合成拷贝构造函数的情况 总结 接下来我将持续更新“深度解读《深度探索C对象模型》”系列&#xff0c;敬请期待&#xff0c;欢迎左下角点击关注&#xff01;也可以关注公众号&#xff1a;iShare爱分享&#x…

android进阶-Binder

参考&#xff1a;Android——Binder机制-CSDN博客 机制&#xff1a;Binder是一种进程间通信的机制 驱动&#xff1a;Binder是一个虚拟物理设备驱动 应用层&#xff1a;Binder是一个能发起进程间通信的JAVA类 Binder相对于传统的Socket方式&#xff0c;更加高效Binder数据拷贝…

销售第一天拿下7400万 《我独自升级》在全球范围炸响

易采游戏网5月11日消息&#xff0c;近日一款名为《我独自升级》的韩式二次元游戏在全球范围内引发了热烈的反响。据悉&#xff0c;该游戏在上线首日便实现了惊人的收入&#xff0c;达到了7400万人民币&#xff0c;这一数字不仅远超预期&#xff0c;更是有史以来同类型游戏中最高…

【C++阅览室】C++之Vector(容器)

目录 vector的介绍 vector的使用 vector的定义 vector iterator 的使用 vector 空间增长问题 vector 增删查改 vector 迭代器失效问题。&#xff08;重点&#xff09; vector的介绍 1、 vector 是表示可变大小数组的序列容器&#xff0c;可以使用连…

C——单链表

一.前言 我们在前面已经了解了链表中的双向链表&#xff0c;而我们在介绍链表分类的时候就说过常用的链表只有两种——双向带头循环链表和单向不带头不循环链表。下来我来介绍另一种常用的链表——单向不带头不循环链表也叫做单链表。不清楚链表分类的以及不了解双向链表的可以…

数仓开发流程规范

一、目的 数据研发规范化旨在为数据开发提供规范化的研发流程指导方法&#xff0c;目的是简化、规范化日常工作流程&#xff0c;提高工作效率&#xff0c;较少无效与冗余工作&#xff0c;赋能企业更强大的数据掌控力来应对海量增长的业务数据&#xff0c;从而释放更多的人力与…

keil的jlink重新选择芯片识别

keil选择jlink要选择对应芯片&#xff0c;一旦选择成功会出现以下文件 如果选择错了芯片类型&#xff0c;就需要删除这两个文件&#xff0c;然后重新进入选择&#xff0c;就可以了

神经网络与空间变换关系

神经网络的隐藏层实际上就是在进行一次空间变换&#xff0c;隐藏层中神经元的个数就是变换后空间的维度&#xff0c;代表可以升维也可以降维。 不同是 神经网络的一层运算不只有矩阵乘法&#xff0c;还会有一个加法。以及 进行完线性计算后&#xff0c;还要经过非线性的激活函…

泰迪智能科技企业数据挖掘流程分析及特色服务优势

企业发展会沉淀大量的数据&#xff0c;数据中囊括了企业业务各种维度指标&#xff0c;通过数据挖掘和数据分析 &#xff0c;让企业业务了解过去、现在和未来将要发生什么&#xff0c;从而更好的调整企业发展方向。泰迪智能科技企业数据挖掘平台是面向企业级用户快速处理数据构建…

微信小程序之简单的发送弹幕操作

大家看视频的时候是不是时不时会有弹幕飘过~ 在我们微信小程序当中&#xff0c;我们可以十分简单的实现&#xff0c;接下来为大家介绍一下吧&#xff01; 我们使用微信官方给我们的一个视频链接 "http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey302802…

语言基础 /CC++ 可变参函数设计与实践,va_ 系列实战详解(强制参数和变参数的参数类型陷阱)

文章目录 概述va_ 系列定义va_list 类型va_start 宏从变参函数的强制参数谈起宏 va_start 对 char 和 short 类型编译告警宏 va_start 源码分析猜测 __va_start 函数实现 va_arg 宏宏 va_arg 无法接受 char 和 short为啥va_arg可解析int却不能解析float类型&#xff1f;宏 va_a…

Linux 第二十七章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

答辩PPT不会做?试试这些AI工具,一键生成

在我原本的认知里面&#xff0c;答辩PPT是要包含论文各个章节的&#xff0c;在答辩时需要方方面面都讲到的&#xff0c;什么摘要、文献综述、实证分析、研究结果样样不落。但是&#xff0c;这大错特错&#xff01; 答辩PPT环节时长一般不超过5分钟&#xff0c;老师想要的答辩P…