当前位置: 首页 > news >正文

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

http://www.cnnetsun.cn/news/574271.html

相关文章:

  • 万能分类器实时分类方案:云端流处理,延迟低于500ms
  • 链游开发成本大揭秘:从50万到2亿,你的项目该选哪条路?
  • MiDaS模型调优:提升深度估计精度的技巧
  • 混合语言翻译怎么破?HY-MT1.5-7B镜像高级功能详解
  • AGI-Next前沿峰会「沉思报告」——中国AGI背后的产业逻辑与战略分野
  • 未来 5 年 “黄金专业” TOP4!人才缺口超百万,毕业即月薪过万,现在报考还不晚!
  • 导师严选8个AI论文网站,专科生搞定毕业论文必备!
  • AI MiDaS指南:处理低光照图像的深度估计
  • 【VTK手册036】网格拓扑简化工具:vtkCleanPolyData 使用指南
  • 文献查询免费网站推荐与使用指南:高效获取学术资源的实用工具平台
  • 软件测试之压力测试
  • AI深度估计实战:MiDaS模型的热力图
  • 30_个渗透实战技巧_从弱口令爆破到权限提升全攻略!
  • 黑客常用工具之Nmap:别等被攻击,才懂它的可怕与实用
  • While循环逆向分析特征
  • 年终盘点|如何展望_2026_的网络安全市场?
  • 一文掌握Neo4j+GraphRAG+生成AI:制药行业主数据管理新范式,小白也能学会的大模型应用实战指南
  • 微信小程序自动化测试—自定义测试(Minium)
  • 超越单点测量:高速DIC技术解析大型结构振动台试验的全场变形数据
  • 非接触式晶圆检测新方案:基于DIC技术的热膨胀系数(CTE)与翘曲测量
  • MiDaS模型性能测试:CPU环境下的推理速度
  • 分类模型持续学习:万能分类器在线更新+弹性GPU支持
  • AI分类模型选择困难?5个预训练模型开箱即用对比
  • MiDaS模型应用案例:建筑场景深度估计实战
  • Spark详解
  • 人名地名机构名自动高亮|AI智能实体侦测服务来了
  • SQLite MCP服务器安装以及客户端连接配置
  • 中文命名实体识别新体验|基于AI智能实体侦测服务快速实现文本高亮
  • MiDaS实战:室内场景深度估计应用案例与参数调优
  • AI智能体“失忆“终结者来了!智能体2.0架构让大模型彻底“开窍“,小白也能搞定企业级开发