文章目录

  • 前言
  • 一、创建点击事件的方法
  • 二、判断用户是否授权位置
  • 三、弹出位置授权框
  • 四、坐标到坐标所在位置的文字描述的转换(逆地址解析)
  • 五、拒接授权后再次点击按钮跳转到允许访问位置设置
  • 总结

前言

前提:该实例是使用uniapp的小程序 实现的
文章描述:
这里要实现的功能是:
1、点击页面中的一个按钮
2、判断用户是否授权位置信息
3、未授权–>弹出位置授权框;已授权–>进入下一个页面(地址选择页);
4、弹出位置授权框后,是否同意授权
5、同意:得到地址;不同意:–>进入下一个页面(地址选择页)
6、用户不同意位置授权的前提下,用户第二次进入小程序点击这个按钮:弹窗提示用户是否开启位置访问
7、同意:跳转找设置用户开启允许访问设置
8、不同意:–>进入下一个页面(地址选择页)
结果:得到用户当前位置或用户进入地址选择页选择需要的位置


一、创建点击事件的方法

在pages/home/home.vue编写此代码创建点击事件isdingwei(),

<template><view class="location"><!-- 定位 --><view class="location-view" @click="isdingwei()"><text class="location-text">{{city}}</text></view><!-- end --></view>
</template>
<script>export default {data() {return {city: '深圳市'}},methods:{isdingwei(){//点击事件的方法}}}
</script>

二、判断用户是否授权位置

考虑到在项目中我们可能不止一次地方用到或者方便修改等问题,
1、项目下创建了新的目录存放(utils/indes.js),如图:

2、在utils/indes.js写一个判断用不是否授权位置的方法authorizedLocation():

export function authorizedLocation(){return new Promise((resolve,reject)=>{uni.getSetting({success:(res)=>{// res.authSetting['scope.userLocation'] === undefined  表示 初始化进入,从未授权// res.authSetting['scope.userLocation'] === true       表示 已授权// res.authSetting['scope.userLocation'] === false      表示 授权拒绝if( res.authSetting['scope.userLocation'] === undefined){console.log("弹出位置授权框")}else if(res.authSetting['scope.userLocation'] === true){console.log("已经授权")}else if(res.authSetting['scope.userLocation'] === false){console.log("弹出允许授权设置框")}}})})
}

3、在项目中引入,并使用:

<script>//引入import {authorizedLocation} from '../../../utils/index.js'export default {data() {return {city: '深圳市'}},methods:{isdingwei(){// 判断是否授权authorizedLocation()}}}
</script>

在控制台可以看到我们的结果可以看到我们是没有授权过的

三、弹出位置授权框

1、在(utils/indes.js)下在定义一个方法getLocation()获取用户位置信息:

// 获取用户当前位置
export function getLocation(){return new Promise((resolve,reject)=>{uni.getLocation({type: 'wgs84',success:(res)=>{resolve(res)console.log(res)console.log('当前位置的经度:' + res.longitude);console.log('当前位置的纬度:' + res.latitude);},fail:(err)=>{reject(err)console.log(err)}})})
}

2、在authorizedLocation()方法中调用,如图:

在方法里面的第一个判断条件里添加代码段:

if( res.authSetting['scope.userLocation'] === undefined){// console.log("弹出位置授权框")getLocation().then((res)=>{// 授权位置成功resolve(res)}).catch((err)=>{// 授权位置失败reject(err)uni.showToast({title: '授权位置失败',icon: 'none',duration: 3000})})}

前提:res.authSetting[‘scope.userLocation’] === undefined 表示 初始化进入,从未授权。结果:
1、点击按钮–>弹出授权框

2、–>同意

3、–>不同意

四、坐标到坐标所在位置的文字描述的转换(逆地址解析)

用户授权成功后,就得了用户位置的经纬度,通过经纬度转换成文字描述,同样我们把实现方法先封装到pages/utils/index.js 下:
1、逆地址解析需要用到地图的AIP,所以移步到腾讯地图做好准备工作,我觉得跟着官方文档做就好了,不过也会有一些坑,我把我遇到的写上:

1、第一、第二、第四步骤跟着官方文档走就好了
2、第三步,下载好了放到自己的文档的目录下我放在了、/libs的目录下,如图:

3、申请号的Key:放到项目里(我放在了、config/indes.js),最好放在全局这样修改起来方便,引入看下面

4、第五步骤中我的项目是vue3,不能个官方文档那样引入

// 腾讯地图秘钥引入
import * as KEY from '../config';import QQMapWX from '../libs/qqmap-wx-jssdk.js';
const qqmapsdk = new QQMapWX({key: KEY.MAP_KEY
})

在看看官方文档的逆地址解析,定义reverseGeocoder (location)函数实现转换:

// 逆地址解析(坐标转具体位置信息)
// location:参数为经纬度{longitude, latitude}
// get_poi:是否返回周边POI列表:1.返回;0不返回(默认)
// poi_options:用于控制Poi列表export function reverseGeocoder (location) {return new Promise((resolve, reject) => {qqmapsdk.reverseGeocoder({location: location,get_poi: 1,poi_options: 'policy=1;page_size=20;page_index=1',success: res => {resolve(res)},fail: err => {reject(err)uni.showToast({title: err.message,icon: 'none',duration: 3000})}})})
}

5、回到pages/home/home.vue 。在引入上添加 reverseGeocoder,定义getLocationInfo(location)方法调用 reverseGeocoder()

 import {authorizedLocation,reverseGeocoder} from '../../../utils/index.js'
// 根据经纬度得到位置信息getLocationInfo(location){// console.log("进来没")reverseGeocoder(location).then((res) => {console.log('当前位置信息:', res)//获取所在的城市this.city = res.result.ad_info.city})               .catch((err) =>{})},// end

1、在isdingwei()里面调用getLocationInfo(location):

isdingwei(){// 判断是否授权authorizedLocation().then((res)=>{// 已授权// console.log("res里面有什么!!!",res)const latitude = res.latitude;const longitude = res.longitude;let location = { longitude, latitude }// 根据经纬度得到位置信息this.getLocationInfo(location)}).catch(()=>{})},

6、已授权位置直接进入下一个页面,在isdingwei()添加代码段:

isdingwei(){// 判断是否授权authorizedLocation().then((res)=>{// 第一次授权if(res.errMsg==="getLocation:ok"){console.log("res里面有什么!!!",res)const latitude = res.latitude;const longitude = res.longitude;let location = { longitude, latitude }// 根据经纬度得到位置信息this.getLocationInfo(location)}else if(res.errMsg==="getSetting:ok"){//已授权uni.navigateTo({url: '../../../../citylist/citylist'})}}).catch(()=>{})},

在 authorizedLocation()函数中判断为已授权哪里加上resolve(res):

五、拒接授权后再次点击按钮跳转到允许访问位置设置

在utils/index.js目录下的authorizedLocation()函数中添加如下代码段
在(else if(res.authSetting[‘scope.userLocation’] === false){ … }){}里面加

 // console.log("弹出允许授权设置框")uni.showModal({title: '提示',content: '是否允许授权位置信息',confirmText: '去设置',success:(res)=>{if(res.confirm){uni.openSetting({success:(res)=> {if (res.authSetting['scope.userLocation']) {resolve(res)} else {reject(res)uni.showToast({title: '授权失败',icon: 'none',duration: 3000})}},fail: (err) => {reject(err)uni.showToast({title: '打开设置异常',icon: 'none',duration: 3000})}})}else {reject(res)console.log("asjfs 卡号的")console.log(res)}},fail: err => {reject(err)uni.showToast({title: '弹窗异常',icon: 'none',duration: 3000})}})

在pages/home/home.vue中 isdingwei()方法中添加代码段:

.catch((err)=>{if(err.errMsg==="showModal:ok" && err.confirm==false){uni.navigateTo({url: '../../../../citylist/citylist'})}})

完成啦!!!!


总结

以上就是今天学习到的一些内容,本文仅仅自己的学习过程的记录,可能有些写的不好的地方,也不够优雅,只是简单的把功能实现了,各位大佬看到有什么不对的地方还望指正,和我一样的新手有什么不懂的地方也可以一起讨论。

uniapp微信小程序:点击按钮先判断用户是否授权位置信息、用户位置信息授权、进入下一个页面相关推荐

  1. uniapp 微信小程序 点击按钮实现复制功能

    copyNumHandle(){uni.setClipboardData({data: this.formdata.orderNum, // data的值为你要复制的内容success: res =& ...

  2. 微信小程序点击按钮分享指定页面

    微信小程序点击按钮分享指定页面 1.在wxml里写所要点击的按钮 <button data-info='{{order}}' open-type="share" hover- ...

  3. uniapp微信小程序左上角返回按钮的监听

    项目场景: uni-app 开发微信小程序,界面中点击左上角的返回按钮或者是系统自带的虚拟返回操作,返回前监听用户是否在页面内进行了相应操作,如果有则进行提示(提示用户是否确定要返回),如果没有则直接 ...

  4. 微信小程序点击按钮弹出弹窗_微信小程序实现的点击按钮 弹出底部上拉菜单功能示例...

    本文实例讲述了微信小程序实现的点击按钮 弹出底部上拉菜单功能.分享给大家供大家参考,具体如下: index.wxml 弹出action sheet {{item.txt}} 取消 提示:您选择了菜单{ ...

  5. 微信小程序点击按钮弹出弹窗_转载 | 广东大学生就业创业微信小程序操作流程详解(一)...

    广东大学生就业创业微信小程序 操作流程详解(一) 转眼来到10月,炎炎夏日也阻挡不了青春的忙碌,同学萌走出校园,迈向社会. 在这段时间,同学们不仅要准备毕业论文,应对毕业答辩,还需要兼顾各种毕业手续的 ...

  6. 微信小程序-点击按钮退出小程序

    需求 小程序中,用户点击"不同意"按钮大于三次后,直接退出小程序. 实现 <button wx:if="{{ counts <= 3 }}"> ...

  7. 微信小程序点击按钮弹出弹窗_微信小程序自定义弹窗(可通用)

    本文为自定义弹窗,该内容可满足如下需求: 自定义各种布局弹窗. 点击弹窗布局外消失弹窗 弹出弹窗时背景阴影半透明 各方向弹出效果(本文为自下而上弹出). (后续可能会补充新需求,或可以留言讨论你的需求 ...

  8. 微信小程序点击按钮弹出弹窗_微信小程序开发弹出框实现方法

    本文主要和大家分享微信小程序开发弹出框实现方法,本文所分享的代码很清晰,希望能帮助到大家. 消息提示框 模态弹窗 操作菜单 1.消息提示--wx.showToast(OBJECT) //show.js ...

  9. 微信小程序点击按钮变字体颜色

    微信小程序开发: 实现一个按钮,和一段文字"Hello World",点击时依次按照"红,绿,蓝,绿"的次序循环变换文字颜色.即:红,绿,蓝,绿,红,绿,蓝,绿 ...

  10. uniapp微信小程序自定义相机 ,给相机添加辅助框,解决拒绝相机默认授权后无法再次拉起相机授权问题

    微信小程序自定义相机 效果 文章目录 微信小程序自定义相机 效果 需求 一.小程序自定义相机 1.使用uniapp的camera组件 二.使用cover-view,cover-image加辅助边框 三 ...

最新文章

  1. 行情分发速度为王,谁是证券公司的生命线?
  2. 学计算机需要多少内存,电脑内存多大才够用
  3. php ignore special characters,PHP忽略第5个字符?(PHP ignore 5th character?)
  4. linux安装XtraBackup8
  5. 12种JavaScript MVC框架之比较
  6. Linux:JDK配置
  7. 因观看大量违规视频致抑郁,审核人员起诉抖音
  8. mysql监控 代码审计_Seay源代码审计系统2.1及源码开放 人人都是代码审计师
  9. Adober Pro DC 破
  10. BAT 批处理注释命令rem、@rem和::
  11. 基于java SSM的仿哔哩哔哩视频分享系统
  12. 勇者斗恶龙10 android,《勇者斗恶龙》系列35周年纪念直播情报汇总
  13. 十大顶级骨传导蓝牙耳机,推荐五款顶流的骨传导耳机
  14. Mysql事务隔离与Spring
  15. 2021会宁三中高考成绩查询,2019中考分数线
  16. VTK移动立方体法创建多个等值面的透视3D模型
  17. 三方协议的服务器,电子口岸电子支付签定三方协议是怎么操作的
  18. J0007. 华为手机怎么开启开发者选项
  19. AVL树的操作及调整成AVL树
  20. python爬取flash数据_python爬虫: 爬取flash播放页面的信息

热门文章

  1. 详解SOME/IP-SD协议文档-翻译版
  2. Vulnhub-OSCP靶机实战
  3. 韩语中的第二人称“你”应该怎么说?
  4. 深度学习之视频人脸识别系列二:人脸检测与对齐
  5. 7千8百多条成语填空选字ACCESS\EXCEL
  6. 2018 微信数据报告
  7. 企业威胁情报技术能力阶段
  8. Git之先拉取再推送
  9. 奥比中光参与南科大计算机系“创新实践”课程指导
  10. 亚马逊MWS开发--开始篇