2026/5/19 5:10:37
网站建设
项目流程
乌兰察布市建设银行网站,十个有创意的线上活动,代理广告投放平台,世界重大新闻熟悉的朋友知道我最近一段时间在搞安卓方面的内容#xff0c;使用uni-app开发的这段时间总算是体会到了网上兄弟们的心声。
怎么说呢#xff1f;难以言喻#xff01;
想要无能狂怒的叱骂#xff0c;却又不得不默默的翻看API文档一点点的摸索#xff0c;找到解决之路的那…熟悉的朋友知道我最近一段时间在搞安卓方面的内容使用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 },采用这个方案成功获取到了定位信息但是需要注意两个点必须获得用户授权尤其是在高版本安卓系统中。本人采用的是安卓11及以下的设备设备尽量在户外使用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