uniapp 持续获取定位(登录状态下才获取)(不采用定时器)(任意页面都可监听定位改变)

news2024/11/18 15:39:40

基于上次文章做了优化和改良,保证在登录状态下才获取定位信息

uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)_uniapp小程序定位_前端小胡兔的博客-CSDN博客本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定位信息, 位置更新也会触发相关自定义事件_uniapp小程序定位https://blog.csdn.net/weixin_44805839/article/details/131984957?utm_source%20=%20uc_fansmsg


优点

  1. 只设置一次
  2. 不采用定时器的方式
  3. 无需多个页面调用
  4. 单独页面若想获取当前位置是否变化 可单独设置监听,并调用不同逻辑事件
  5. 根据登录状态区分是否调用(新增)

原理: 

  1. 采用uniapp推出的: uni.onLocationChange(监听实时地理位置变化事件)

  2. 在app.vue中定义一次 且设置监听事件(便于独立页面监测定位改变并调用其他事件)

        有关"uni.onLocationChange"的相关内容,不再赘述,详情见官网:

uni.onLocationChange(FUNCTION CALLBACK) | uni-app官网uni-app,uniCloud,serverlesshttps://uniapp.dcloud.net.cn/api/location/location-change.html


实现:

1 持续获取定位

1.1 app.vue页面定义globalData(全局变量)和方法,并在onshow和onhide中调用

<script>
	//import httpApi from '@/utils/httpApi.js' //自定义的接口文件 
	export default {
		globalData: {
			latitude: undefined,
			longitude: undefined,
			loginType: false, //登录状态 true为已登录
		},

		onLaunch: function() {
			console.log('App Launch')
		},
		onShow: function() {
			console.log('App Show')
			this.globalData.loginType = uni.getStorageSync('token') ? true : false;
			this.updateLocationChange();
		},
		onHide: function() {
			console.log('App Hide')
			uni.stopLocationUpdate();
		},
		methods: {
			updateLocationChange: function() {
				if (!this.globalData.loginType) {
					console.log("没登录 不上传locationchange")
					return;
				}
				let that = this;
				uni.startLocationUpdate({
					success: res => {
						uni.onLocationChange(function(res2) {
							that.globalData.latitude = res2.latitude;
							that.globalData.longitude = res2.longitude;
                            //然后调用上传经纬度接口 自行定义
                        //httpApi.syncLocation(that.globalData.latitude, that.globalData
								//.longitude).then(res => {});
						});
					},
					fail: err => console.error('开启小程序接收位置消息失败:', err),
					complete: msg => console.log('调用开启小程序接收位置消息 API 完成')
				});
			},
		}
	}
</script>

<style>
	/*每个页面公共css */
</style>

1.2 在manifest.json文件源码中做相关配置

        (重要设置"startLocationUpdate"和"onLocationChange"):

"mp-weixin" : {
	"appid" : "", //appid
	"setting" : {
		"urlCheck" : false
	},
	"usingComponents" : true,
	"permission" : {
		"scope.userLocation" : {
			"desc" : "定位" //微信小程序获取location必填
		}
	},
	"requiredPrivateInfos": [
			"getLocation", //使用uni.getlocation才需声明
			"startLocationUpdate", //必要
			"onLocationChange" //必要
		]
},

1.3 登录成功后调用:

getApp().globalData.loginType = true; //改变登录状态
getApp().updateLocationChange(); //开启上传位置

1.4 退出登录后修改登录状态:

getApp().globalData.loginType = false;

这样就做到登录后开启监听位置啦~


2 监听globalData中的属性

在任意页面监听globalData中的数据实时变化,并调用定义的不同方法

2.1 在app.vue中定义 "watch" 方法,具体方法如下:

// 监听全局变量变化(经纬度需要)
watch: function(variate, method) {
	var obj = this.globalData;
	let val = obj[variate]; // 单独变量来存储原来的值
	Object.defineProperty(obj, variate, {
		configurable: true,
		enumerable: true,
		set: function(value) {
			val = value; // 重新赋值
			if (method) {
				method(variate, value); // 执行回调方法
			}
		},
		get: function() {
			// 在其他界面调用getApp().globalData.variate的时候,这里就会执行。
			return val; // 返回当前值
		}
	})
},

2.2 使用

例如我想经纬度变化时 可以在页面这样操作:

onLoad() {
	this.latitude = getApp().globalData.latitude;
	this.longitude = getApp().globalData.longitude;
	//实时获取当前位置
	getApp().watch('latitude', this.watchLocation);
	getApp().watch('longitude', this.watchLocation);
},
methods: {
    //监听location变化回调
	watchLocation: function(name, value) {
		if (name == 'latitude') {
			this.latitude = value;
		}
		if (name == 'longitude') {
			this.longitude = value;
		}
	},
}

以上就是本篇文章的全部内容啦~ 欢迎小伙伴们一起探讨 一起进步~

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

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

相关文章

2023年我想开信用账户!融资融券开通佣金最低是多少?两融利率低至5%!

2023年融资融券开通佣金最低是多少&#xff1f;两融利率低至5%&#xff01; 随着科技的不断发展和金融市场的日益完善&#xff0c;2023年的融资融券市场将迎来更加便捷和低成本的交易方式。据悉&#xff0c;融资融券开通佣金最低仅为5%&#xff0c;且利率也将进一步降至5%左右。…

eeglab(自用)

目录 1.加载、显示数据 2.绘制脑电头皮图 3.绘制通道光谱图 4.预处理工具 5.ICA去除伪迹 5. 提取数据epoch 1.加载、显示数据 观察事件值(Event values)&#xff1a;该数据集中包含2400个事件&#xff0c;每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…

HCIP BGP选路规则总结

选路前提条件 多条BGP路由目标相同&#xff0c;且均可优(下一跳可达、同步关闭)&#xff0c;具有相同的优先级&#xff08;管理距离&#xff09;。 1、优选Preference_Value值最高的路由&#xff08;私有属性&#xff0c;仅本地有效&#xff09;。 不传递 权限最高属性 …

为什么vscode访问谷歌浏览器是显示白色????

1、我的代码没有错误: 2、访问谷歌浏览器就显示白色&#xff1f;&#xff1f;&#xff1f;是什么情况

【word中如何插入带圆圈的数字编号】

第一种方法 在插入菜单栏选择编号 输入需要插入的数字&#xff0c;并选择编号类型 即可成功创建一个圆圈数字编号 第二种方法 在输入原本的数字后&#xff0c;选中数字&#xff0c;点击开始菜单栏中的字 选择所需的符号点击确定 即可成功添加带圈文字&#xff0c;但此种…

C#使用EmguCV播放视频

目录 一、前言 1、简介 2、测试工程代码下载链接 3、EmguCV 库文件下载链接 二、工程环境配置 1、EmguCV控件添加引用 &#xff08;1&#xff09;窗口控件添加 &#xff08;2&#xff09;相关Dll文件添加添加引用 &#xff08;3&#xff09;工程运行基础文件夹添加 &a…

棱镜七彩正式加入龙蜥社区安全联盟(OASA)

近日&#xff0c;龙蜥社区安全联盟&#xff08;OASA&#xff09;正式成立&#xff0c;棱镜七彩成为该联盟成员单位。 龙蜥社区安全联盟是促进产业合作的非营利组织&#xff0c;致力于打造中立开放、聚焦操作系统信息安全的交流平台&#xff0c;推进龙蜥社区乃至整个产业安全生态…

【计算机视觉 | 目标检测 | 图像分割】arxiv 计算机视觉关于目标检测和图像分割的学术速递(7 月 31 日论文合集)

文章目录 一、检测相关(9篇)1.1 Semi-Supervised Object Detection in the Open World1.2 Multi-layer Aggregation as a key to feature-based OOD detection1.3 Non-invasive Diabetes Detection using Gabor Filter: A Comparative Analysis of Different Cameras1.4 Local …

【福建事业单位-推理判断】03类别推理

【福建事业单位-推理判断】03类别推理 一、类别推理1.1语义关系考点一、近义反义关系&#xff08;不需要严格的&#xff0c;意思相近即可&#xff09;近义反义的二级辨析&#xff08;感情色彩&#xff09;考点二&#xff1a;比喻义、象征义 1.2 逻辑关系1.2.1全同关系&#xff…

【性能测试】性能数据采集工具nmon安装使用及报告参数含义详解

目录 nmon nmon下载 解压安装 启动 数据采集配置 生成图形结果 nmon报告中的参数含义 资料获取方法 nmon nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具&#xff0c;它能在系统运行过程中实时地捕捉系统资源的使用情况&#xff0c;并且能输出结果到文…

OJ:C++ | [vector] — 力扣

文章目录 118. 杨辉三角 - 力扣思路解&#xff1a; 17. 电话号码的字母组合 - 力扣思路&#xff1a;递归解&#xff1a; 137. 只出现一次的数字 II- 力扣思路&#xff1a;解&#xff1a; 118. 杨辉三角 - 力扣 题目链接&#xff1a;118. 杨辉三角 - 力扣&#xff08;LeetCode&…

车载开发核心技术——SystemUI控制技术

SystemUI是指车载开发中的一个重要组件&#xff0c;它负责管理和控制车机的用户界面和交互功能。本文将详细介绍SystemUI的各项控制技术&#xff0c;包括音量控制、RingtonePlayer、电源管理、任务管理、通知栏和服务定制&#xff0c;并提供相关代码示例和解析。 一、音量控制…

【Docker】Docker容器化技术基础

Docker容器化技术 Docker&#xff08;软件跨环境迁移&#xff09;Docker概念&#xff1a;安装Dockerdocker架构配置Docker镜像加速器 一、Docker命令服务daemon相关的命令镜像相关命令Docker容器相关命令 二、Docker容器的数据卷数据卷概念配置数据卷配置数据卷容器 三、Docker…

【linux--->数据链路层协议】

文章目录 [TOC](文章目录) 一、数据链路层协议概念二、以太网帧格式1.字段分析 三、局域网通信原理四、ARP协议1.结构2.作用3.ARP通信过程4.ARP协议相关命令 五、局域网内中间人原理六、DNS系统(域名系统)1.域名概念2.DNS系统组成3.DNS协议3.浏览器输入域名后的通信过程4.dig工…

网络授权验证在线发卡系统是什么

软件授权发卡系统是一种用于对软件进行授权管理的系统。在当前数字化时代&#xff0c;软件授权发卡系统的应用越来越广泛&#xff0c;不仅可以帮助软件开发商保护自己的软件知识产权&#xff0c;还可以帮助用户合法使用软件&#xff0c;从而实现双赢的局面。 软件授权发卡系统的…

深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测

大家好,我是微学AI,今天给大家介绍一下深度学习实战46-基于CNN的遥感卫星地图智能分类,模型训练与预测。随着遥感技术和卫星图像获取能力的快速发展,卫星图像分类任务成为了计算机视觉研究中一个重要的挑战。为了促进这一领域的研究进展,EuroSAT数据集应运而生。本文将详细…

设计图一般都用什么工具制作?

每个设计师都需要设计图制作软件对设计图软件的选择也有一些需求&#xff0c;可以提高一些效率。网上有很多免费的PC设计软件。本文推荐了2023年5款易用的设计图制作软件 1.即时设计 即时设计是一款免费的在线 UI 设计工具&#xff0c;无系统限制&#xff0c;浏览器打开即可使…

WiFi无线组网温湿度实时监测系统

近年来随着我国电子技术和无线通信技术的快速发展&#xff0c;远距离数据采集传输被应用到众多领域&#xff0c;由于事关环境安全和生命健康&#xff0c;受到了各行各界的关注。在温湿度监测中&#xff0c;目前采用的通信技术主要是4G、WiFi、以太网、LoRa等&#xff0c;今天&a…

新学期来临,如何快速创建分班查询系统?

离开学的时间越来越近&#xff0c;一些老师正为如何通知学生分班信息而感到困扰。他们意识到使用在线文档存在学生信息安全的问题&#xff0c;因为同学和家长在查询时可能会误操作并更改其他同学的信息。另外&#xff0c;如果老师们需要逐个给同学和家长打电话通知&#xff0c;…

激荡十三年,消费金融进入“体验争夺战”的下半场

消费金融行业又开始涌动着变局。 先是一些老玩家悬着的心&#xff0c;终于落地。过去两年&#xff0c;消费金融是蚂蚁集团整改的关键板块。前不久&#xff0c;蚂蚁集团被监管部门开出71.23亿元的“罚单”&#xff0c;市场普遍认为这是利空出尽的信号。 与此同时&#xff0c;竞…