当前位置: 首页 > 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.jsqmd.com/news/234363/

相关文章:

  • MiDaS模型调优:提升深度估计精度的技巧
  • AI MiDaS指南:处理低光照图像的深度估计
  • 行业热点 | 眼见不为实:警惕突发事件中的 AI 图像与误导信息
  • AI分类器从入门到放弃?不,是入门到精通!
  • # Flutter Provider 状态管理完全指南
  • 支持REST API的中文NER服务|AI智能实体侦测镜像推荐
  • 少样本迁移分类实战:预训练模型+云端微调
  • 数字类型的奥秘:数字类型的深度解析
  • AI分类器新手指南:从理论到实践,云端GPU 1小时全搞定
  • ASTM F1140标准解读:医疗器械初包装抗内压破坏测试要点
  • 从本地化到国际化|腾讯HY-MT1.5助力企业级翻译落地
  • MiDaS应用案例:智能家居中的手势识别系统
  • 零代码玩转AI分类:这些云端工具让你事半功倍
  • 如何快速实现中文命名实体识别?试试AI智能实体侦测服务
  • 从零部署腾讯混元翻译模型|HY-MT1.5-7B镜像一键启动方案
  • 英文文献检索网站有哪些 常用平台及使用指南
  • MiDaS模型性能测试:CPU推理速度
  • AI MiDaS指南:处理高动态范围图像
  • 无需编码的中文NER方案|AI智能实体侦测服务一键部署
  • 单目深度估计技术解析:MiDaS的核心算法
  • MiDaS应用指南:虚拟服装试穿的3D体型测量
  • 基于MiDaS的3D感知:配置与使用
  • PLC远程运维:如何让全球分散的设备像在现场一样?
  • 如何快速实现中文NER?试试AI智能实体侦测服务镜像
  • AI视觉感知技术:MiDaS模型在AR导航中的实践
  • 术语干预+上下文感知|HY-MT1.5让翻译更精准可控
  • 企业如何借助普通宽带低成本搭建远程办公组网?
  • 导师严选8个AI论文网站,专科生搞定毕业论文必备!
  • AI MiDaS教程:如何制作高质量的深度视频
  • AI深度估计进阶:MiDaS模型多任务学习优化方案