news 2026/5/12 19:51:10

uni-app实现网络离线定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uni-app实现网络离线定位

熟悉的朋友知道我最近一段时间在搞安卓方面的内容,使用uni-app开发的这段时间总算是体会到了网上兄弟们的心声。

怎么说呢?难以言喻

想要无能狂怒的叱骂,却又不得不默默的翻看API文档一点点的摸索,找到解决之路的那一刻,不亚于我买双色球中五块钱大奖的那天心情。

最近需要用uni-app实现一下定位的问题,其实就是获取经纬度,然后通过 MQTT 发送到服务器上。(关于MQTT部分详见上文 # uni-app实现本地MQTT连接)

接到这个需求的时候感觉非常简单,因为 uni-app 本身就有定位的API。

js

体验AI代码助手

代码解读

复制代码

uni.getLocation({ type: 'wgs84', success: function (res) { console.log('当前位置的经度:' + res.longitude); console.log('当前位置的纬度:' + res.latitude); } });

一段代码搞定问题,但是,项目那边突然传来消息说:定位不到

我这边使用Trae紧急排查,但是却没发现任何问题,Trae也表示系统运行非常稳定。

但是项目现场就是反馈定位不到,一下午的时间Trae建议我排查了设备本身、安卓版本、代码语法、打包过程等等。经过一下午的排查终于确定了原因是"没联网"。

气得我当场怒骂...

现在需求确定清楚了:离线定位

这里需要注意一点,虽然设备不接入网络,但事实定位本身是依赖于接收卫星信号。也就是说,没网可以,但是设备必须有GPS定位模块,否则是无法实现定位的。

首先在manifest.json文件中找到modules,在下面添加Geolocation启用定位模块。

同时在distribute / android / permissions权限部分增加定位权限部分。

还需要在 SDK 配置部分增加定位内容。

js

体验AI代码助手

代码解读

复制代码

"modules" : { "Geolocation" : {} // 启用定位模块 }, /* 应用发布信息 */ "distribute" : { /* android打包配置 */ "android" : { "permissions" : [ ... "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>" ] }, }, /* SDK配置 */ "sdkConfigs" : { "geolocation" : { "system" : { "__platform__" : [ "android" ] } } }

我在网上找到的方案是仍然使用 uni-app 的getLocation方法,将请求方式改为gcj02的方式。

js

体验AI代码助手

代码解读

复制代码

uni.getLocation({ type: 'gcj02', success: function (res) { console.log('当前位置的经度:' + res.longitude); console.log('当前位置的纬度:' + res.latitude); } });

但是不知道为什么在我这个终端上这个写法并没有获取到定位信息,甚至代码都不走,多方排查也没有发现问题出在哪儿,遂放弃此方案。

Trae的建议下改为使用html+的定位方案。

js

体验AI代码助手

代码解读

复制代码

testGetLocation() { let that = this; // #ifdef APP-PLUS plus.geolocation.getCurrentPosition( (position) => { console.log('【定位成功】', position); that.location = { latitude: position.coords.latitude, longitude: position.coords.longitude }; }, (error) => { console.log('【定位失败】', error); let msg = '定位失败'; switch (error.code) { case 1: msg = '用户拒绝定位授权'; break; case 2: msg = 'GPS 功能未开启'; break; case 3: msg = '响应超时'; break; default: msg = '未知错误'; } }, { provider: 'gps', // 强制使用 GPS 定位 timeout: 30000, // 最大30秒超时 highAccuracy: true, // 启用高精度模式 maximumAge: 0 // 不使用缓存位置 } ); // #endif },

采用这个方案成功获取到了定位信息,但是需要注意两个点:

  1. 必须获得用户授权,尤其是在高版本安卓系统中。(本人采用的是安卓11及以下的设备)
  2. 设备尽量在户外使用(GPS定位在室内很容易定位不到)

授权部分可以参考如下方法:

js

体验AI代码助手

代码解读

复制代码

getLocationSafely(onSuccess, onError) { let that = this; plus.geolocation.getCurrentPosition( () => {}, (e) => { if (e.code === 4) { // 位置服务未开启 uni.showModal({ title: '定位服务未开启', content: '请前往系统设置开启位置信息,才能获取当前位置', showCancel: true, confirmText: '去设置', success: (res) => { if (res.confirm) { // 跳转到系统设置 plus.runtime.openURL('package:com.android.settings'); } } }); onError?.(new Error('系统定位未开启')); return; } }, { // 3秒超时 timeout: 3000 } ); },

还需要注意的一个点是如果采用自定义基座,一定要记得将定位模块云打包到基座中,否则也是无法定位的。


原文:https://juejin.cn/post/7593892837898747919

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 16:16:50

智能制造为什么要实现EMS和MES的集成

在智能制造成熟度咨询和评估过程中&#xff0c;我们发现许多企业的能源管理系统EMS仅实现了对重点能耗的实时、在线的数据采集与可视化监控&#xff0c;但数据孤立于生产系统&#xff08;MES&#xff09;&#xff0c;没有实现EMS和MES的集成。首先科普&#xff1a;什么是EMS&am…

作者头像 李华
网站建设 2026/5/11 18:29:33

MiDaS模型性能测试:CPU推理速度

MiDaS模型性能测试&#xff1a;CPU推理速度 1. 引言&#xff1a;AI 单目深度估计的现实价值 在计算机视觉领域&#xff0c;从单张2D图像中恢复3D空间结构一直是极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件支持&#xff0c;成本高且部署复杂。而近年来&#xf…

作者头像 李华
网站建设 2026/5/1 7:38:54

如何高效查找文献:掌握<|关键词|>的实用方法与技巧

盯着满屏的PDF&#xff0c;眼前的外语字母开始跳舞&#xff0c;脑子里只剩下“我是谁、我在哪、这到底在说什么”的哲学三问&#xff0c;隔壁实验室的师兄已经用AI工具做完了一周的文献调研。 你也许已经发现&#xff0c;打开Google Scholar直接开搜的“原始人”模式&#xff…

作者头像 李华
网站建设 2026/5/1 7:57:33

如何利用类似谷歌搜索文献的工具高效查找学术资源与研究资料

盯着满屏的PDF&#xff0c;眼前的外语字母开始跳舞&#xff0c;脑子里只剩下“我是谁、我在哪、这到底在说什么”的哲学三问&#xff0c;隔壁实验室的师兄已经用AI工具做完了一周的文献调研。 你也许已经发现&#xff0c;打开Google Scholar直接开搜的“原始人”模式&#xff…

作者头像 李华
网站建设 2026/5/5 20:17:16

【YOLOv8改进】基于tood_x101-64x4d_fpn_ms-2x_coco的卡车过载检测与分类_1

1. YOLOv8改进&#xff1a;基于tood_x101-64x4d_fpn_ms-2x_coco的卡车过载检测与分类 1.1. 研究背景与意义 在物流运输行业中&#xff0c;卡车超载是一个普遍存在的安全问题&#xff0c;不仅会对道路桥梁造成损害&#xff0c;还极易引发交通事故。传统的超载检测方法主要依赖…

作者头像 李华
网站建设 2026/5/1 8:34:08

别再问了!高校网络安全 36 个名词,一篇看懂不踩坑

在高校数字化转型加速的当下&#xff0c;校园网不再只是简单的上网通道&#xff0c;而是承载教学科研、学生管理、财务数据等核心信息的关键载体。随之而来的网络安全风险也愈发复杂&#xff0c;从黑客攻击、数据泄露到系统瘫痪&#xff0c;每一个隐患都可能影响高校正常运转。…

作者头像 李华