uni-app 安卓手机系统定位报错

uni-app 安卓手机系统定位报错

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
版本号 13.2 (22D49)
HBuilderX 正式
版本号 3.99
手机系统 Android
版本号 Android 14
手机厂商 三星
手机机型 SM-A145R/DSN
页面类型 nvue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

uni.getLocation({
type: 'wgs84',
isHighAccuracy: true,
success: (res) => {
console.log('自身坐标:' + JSON.stringify(res))
this.latitude = res.latitude;
this.longitude = res.longitude;
this.covers.push({
id: 10086,
latitude: res.latitude,
longitude: res.longitude,
width: 40,
height: 40,
title: '自身位置',
iconPath: '../../static/images/dingwei.png'
})
this.getList();
},
fail: (err) => {
console.log(JSON.stringify(err))
// uni.showModal({
//  content: '定位失败',
//  success: (res) => {
//      uni.navigateBack();
//  }
// })
},
complete: () => {
console.log('获取经纬度')
}
})

操作步骤:

使用的谷歌地图,nvue页面。自定义基座和云打包后安装到手机上定位报错“getLocation:fail not support gcj02”

预期结果:

能够正常获取定位

实际结果:

getLocation:fail not support gcj02

bug描述:

使用的谷歌地图,nvue页面。自定义基座和云打包后安装到手机上定位报错“getLocation:fail not support gcj02”,即使改成wgs84类型也无法获取定位


更多关于uni-app 安卓手机系统定位报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 安卓手机系统定位报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 开发中,如果遇到安卓手机系统定位报错,可能是由于多种原因引起的。以下是一些常见的问题及解决方案:


1. 权限问题

  • 问题描述:安卓系统需要获取定位权限,如果未授权或权限未正确配置,会导致定位失败。
  • 解决方案
    • manifest.json 中配置定位权限:
      {
        "permission": {
          "android.permission.ACCESS_FINE_LOCATION": {
            "description": "需要定位权限"
          },
          "android.permission.ACCESS_COARSE_LOCATION": {
            "description": "需要定位权限"
          }
        }
      }
      
    • 在代码中动态请求权限:
      uni.authorize({
        scope: 'scope.userLocation',
        success() {
          console.log('授权成功');
        },
        fail() {
          console.log('授权失败');
        }
      });
      
    • 确保在安卓设备的设置中,应用已开启定位权限。

2. 定位服务未开启

  • 问题描述:如果安卓设备的定位服务未开启,会导致定位失败。
  • 解决方案
    • 提示用户开启定位服务:
      uni.showModal({
        title: '提示',
        content: '请开启定位服务',
        success(res) {
          if (res.confirm) {
            // 跳转到系统设置页面
            plus.device.launchApp({ action: 'android.settings.LOCATION_SOURCE_SETTINGS' });
          }
        }
      });
      

3. 高德/百度地图配置问题

  • 问题描述:如果使用了高德或百度地图的定位功能,可能是 SDK 配置不正确导致的。
  • 解决方案
    • 检查 manifest.json 中是否正确配置了地图 SDK:
      {
        "app-plus": {
          "modules": {
            "Maps": {
              "AMap": {
                "appkey_android": "你的高德地图 Android Key"
              },
              "BaiduMap": {
                "appkey_android": "你的百度地图 Android Key"
              }
            }
          }
        }
      }
      
    • 确保在对应地图平台(高德/百度)申请了正确的 App Key,并绑定应用的 packageNameSHA1

4. 定位超时

  • 问题描述:在某些情况下,定位可能需要较长时间,导致超时报错。
  • 解决方案
    • 增加定位超时时间:
      uni.getLocation({
        type: 'wgs84',
        timeout: 10000, // 设置超时时间为 10 秒
        success(res) {
          console.log('定位成功', res);
        },
        fail(err) {
          console.log('定位失败', err);
        }
      });
      

5. 模拟器问题

  • 问题描述:在安卓模拟器中,定位功能可能无法正常工作。
  • 解决方案
    • 尽量在真机中测试定位功能。
    • 如果必须使用模拟器,可以尝试手动设置模拟器的位置信息。

6. 代码问题

  • 问题描述:代码逻辑错误或参数配置不正确。
  • 解决方案
    • 检查 uni.getLocation 的调用代码,确保参数正确:
      uni.getLocation({
        type: 'wgs84', // 或 'gcj02'
        success(res) {
          console.log('定位成功', res);
        },
        fail(err) {
          console.log('定位失败', err);
        }
      });
      

7. 系统版本兼容性问题

  • 问题描述:某些安卓系统版本可能对定位功能支持不完善。
  • 解决方案
    • 测试不同安卓版本的设备,确保兼容性。
    • 捕获错误并给出友好提示:
      uni.getLocation({
        type: 'wgs84',
        success(res) {
          console.log('定位成功', res);
        },
        fail(err) {
          uni.showToast({
            title: '定位失败,请检查设置或稍后重试',
            icon: 'none'
          });
        }
      });
      

8. 检查错误日志

  • 使用 console.loguni.showModal 打印错误信息,定位具体问题:
    uni.getLocation({
      type: 'wgs84',
      success(res) {
        console.log('定位成功', res);
      },
      fail(err) {
        console.log('定位失败', err);
        uni.showModal({
          title: '错误信息',
          content: JSON.stringify(err),
          showCancel: false
        });
      }
    });
回到顶部