news 2026/7/1 15:11:16

uni-app使用北斗卫星实现离线定位

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
uni-app使用北斗卫星实现离线定位

权限配置

仍然采用 HTML5+ 的定位方法,首先需要打开定位权限:

// manifest.json/* 模块配置 */ "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" ] } } } },

这里仅设置了安卓代码,IOS系统需要增加额外的配置。

实现

Trae提醒我这里需要注意,Android 6.0(API 23)及以上版本需要动态申请权限,不能只靠 manifest 声明,否则仍然存在拿不到权限的可能。

// 鉴权 getLocationSafely(onSuccess, onError) { let that = this; // 1. 先检查系统定位是否开启(Android 特有)plus.geolocation.getCurrentPosition(() => { console.log('定位服务已经开启'); uni.showToast({ title: '定位服务已经开启', icon: 'none', duration: 3000 }); }, // 这里只是触发系统检测,不处理成功 (e) => { if (e.code === 4) { // code=4 表示“位置服务未开启” uni.showModal({ title: '定位服务未开启', content: '请前往系统设置开启位置信息,才能获取当前位置', showCancel: true, confirmText: '去设置', success: (res) => { if (res.confirm) { // 跳转到系统定位设置页(仅 Android 有效) plus.runtime.openURL('package:com.android.settings'); } } }); onError?.(new Error('系统定位未开启')); return; } }, { timeout: 3000 } ); }, // 也可以使用 uni-app 的官方API进行鉴权uni.authorize({scope: 'scope.userLocation', success() { // 用户同意,可以调用定位 uni.getLocation({ ... }) }, fail() { // 用户拒绝,提示去设置开启 uni.showModal({ title: '定位权限被禁用', content: '请在设置中开启位置权限', showCancel: false }); } });

除却上面的权限原因导致的定位不到,Trae给出的提示还有需要关注:

  • 定位功能是否已经开启
  • 省电策略是否已经关闭(部分设备省电模式下会限制定位)
  • 一定!一定!一定!要到室外测试

测试的时候可以采用两两对照的方式测试:室外vs室内飞行模式vs有网GPS 开启vs关闭,测试上述九种状态的组合。

// 定位方法 function startBeidouLocation() { // TODO 此处可以先检查定位服务是否开启 plus.geolocation.getCurrentPosition( function(position) { console.log('✅ 定位成功'); console.log('纬度:', position.coords.latitude); console.log('经度:', position.coords.longitude); console.log('来源:', position.coords.source); // 可能显示 gps/beidou/gnss uni.showToast({ title: `定位成功: ${position.coords.latitude.toFixed(5)}, ${position.coords.longitude.toFixed(5)}`, icon: 'none' }); }, function(error) { console.error('❌ 定位失败', error.code, error.message); let msg = ''; switch (error.code) { case 1: msg = '用户拒绝授权'; break; case 2: msg = '位置不可用(可能未搜星)'; break; case 3: msg = '定位超时'; break; default: msg = '未知错误'; } uni.showToast({ title: '定位失败: ' + msg, icon: 'none' }); }, { enableHighAccuracy: true, // 此处必须为 true,才能触发 GNSS(含北斗)timeout: 60000, // 给足 60 秒冷启动时间 maximumAge: 0 // 不使用缓存位置 } ); }

这里的timeout甚至可以给的再大点,使用卫星定位冷启动时间其实非常长,不过你如果不是在人迹罕至的区域,60秒基本上就够用了。

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

计算机毕业设计springboot基于web的流浪动物信息管理系统 基于SpringBoot的流浪宠物救助与领养平台 Web端流浪猫狗信息追踪及领养服务系统

计算机毕业设计springboot基于web的流浪动物信息管理系统285i7752 &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当城市化的脚步越来越快&#xff0c;街巷里出现的流浪动物也在…

作者头像 李华
网站建设 2026/6/26 18:02:39

孤能子视角:“1+1=2“

我的问题(前两个千问回答&#xff0c;第三个信兄回答):1.看看"112"人类认知演化。2.演化中都遇到哪些困难&#xff0c;最后又如何解决&#xff1f;3.以上是千问对"112"人类认知演化史的解读。EIS又会给出怎样的洞察呢&#xff0c;又会如何判断人工智能学习…

作者头像 李华
网站建设 2026/6/28 23:40:38

全网最全专科生必备TOP9AI论文网站测评

全网最全专科生必备TOP9AI论文网站测评 专科生的AI论文写作利器&#xff1a;2026年度测评全面解析 在当前学术环境日益严峻的背景下&#xff0c;专科生在撰写论文时面临诸多挑战&#xff0c;如资料查找困难、写作效率低、格式规范不熟悉等。为了帮助广大专科生更高效地完成论文…

作者头像 李华
网站建设 2026/6/25 18:15:22

吸附能与结合能的理解和计算

在计算化学与材料科学中&#xff0c;能量差是理解反应机理与结构稳定性的核心语言。尤其是"吸附能(AdsorptionEnergy)"与"结合能(BindingEnergy)"&#xff0c;它们都描述"体系由分离态到结合态的能量变化"&#xff0c;却各自揭示了不同层次的化学…

作者头像 李华
网站建设 2026/6/26 13:26:01

springboot154基于Java的篮球NBA球队管理系统

目录 具体实现截图篮球NBA球队管理系统的设计与实现 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 篮球NBA球队管理系统的设计与实现 基于SpringBoot 1.5.4框架和Java技术开发的篮球NBA球队管…

作者头像 李华
网站建设 2026/6/28 22:56:34

智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解

智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解 元数据框架 标题:智能运维AI平台架构设计与服务网格(Istio)整合实践:架构师详解 关键词:智能运维(AIOps)、服务网格(Istio)、微服务架构、可观测性、机器学习、流量管理、自动修复、根因分析 摘要:本…

作者头像 李华