news 2026/2/16 12:44:18

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/2/14 2:53:58

如何实现高精度多语言翻译?HY-MT1.5大模型镜像全解析

如何实现高精度多语言翻译&#xff1f;HY-MT1.5大模型镜像全解析 随着全球化进程加速&#xff0c;企业出海、跨语言内容生成和本地化服务对高质量机器翻译的需求日益增长。传统商业翻译API在术语一致性、上下文连贯性和格式保留方面存在明显短板&#xff0c;难以满足专业场景的…

作者头像 李华
网站建设 2026/2/16 17:25:23

单目深度估计技术解析:MiDaS的核心算法

单目深度估计技术解析&#xff1a;MiDaS的核心算法 1. 引言&#xff1a;从2D图像到3D空间感知的跨越 在计算机视觉领域&#xff0c;如何让机器“理解”真实世界的三维结构一直是一个核心挑战。传统方法依赖双目立体视觉或多传感器融合&#xff08;如LiDAR&#xff09;&#x…

作者头像 李华
网站建设 2026/2/16 8:39:00

多语言混合翻译新标杆|腾讯HY-MT1.5大模型镜像技术亮点全揭秘

多语言混合翻译新标杆&#xff5c;腾讯HY-MT1.5大模型镜像技术亮点全揭秘 在多语言内容呈指数级增长的今天&#xff0c;传统翻译系统正面临前所未有的挑战&#xff1a;用户输入中频繁出现中英夹杂、多语种嵌套、专业术语密集等复杂场景。为应对这一趋势&#xff0c;腾讯开源了…

作者头像 李华
网站建设 2026/2/16 19:53:17

AI万能分类器大赛复盘:冠军方案云端复现指南

AI万能分类器大赛复盘&#xff1a;冠军方案云端复现指南 引言&#xff1a;为什么你需要这个冠军方案&#xff1f; 参加过AI比赛的朋友都知道&#xff0c;从获奖论文到实际可运行的代码往往隔着"三天三夜"的环境配置。去年NeurIPS的万能分类器大赛冠军方案就是一个典…

作者头像 李华
网站建设 2026/2/17 1:23:04

单目深度估计技术对比:MiDaS vs 传统方法

单目深度估计技术对比&#xff1a;MiDaS vs 传统方法 1. 引言&#xff1a;为何单目深度估计是3D感知的关键一步 在计算机视觉领域&#xff0c;从2D图像中恢复3D空间结构一直是核心挑战之一。传统的深度感知依赖双目立体视觉&#xff08;如Stereo Vision&#xff09;、结构光或…

作者头像 李华
网站建设 2026/2/15 23:41:47

数组初始化的编译模式特征

文章目录数组初始化的编译模式特征1. **局部数组存储位置**2. **显式初始化部分**3. **未显式初始化部分的处理**4. **内存布局特征**5. **编译器优化特征**6. **初始化模式识别**7. **逆向识别线索**8: int Arr[10] {1}; 00F21DE0 mov dword ptr [Arr],1 00F21DE…

作者头像 李华