uni-app uni.chooseLocation APP运行打包自定义基座报错

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app uni.chooseLocation APP运行打包自定义基座报错
项目:uniapp vue2,机型:华为meat60pro,Hbuilder X版本4.36,manifest中配置了地图key,使用高德地图。重新制作基座后还是报错。 看过了这个https://ask.dcloud.net.cn/question/195066?rf=195052。除了web配置中高德地图的秘钥和代理没填别的都看着没啥问题,这两个也不是必填吧,就用明文Key不就可以嘛

开发环境 版本号 项目创建方式
uniapp vue2 4.36 HBuilder X

1 回复

针对你提到的 uni-app 中使用 uni.chooseLocation 在 APP 运行打包自定义基座时报错的问题,这里提供一个可能的解决方案和相关的代码示例。首先,确保你使用的 uni-app 和相关依赖是最新版本,因为一些已知的错误可能在新版本中已经被修复。

步骤 1: 检查权限配置

在使用 uni.chooseLocation 前,确保你的 APP 已经正确配置了地理位置权限。在 manifest.json 中添加必要的权限配置:

{
  "mp-weixin": {},
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "android.permission.ACCESS_FINE_LOCATION",
          "android.permission.ACCESS_COARSE_LOCATION"
        ]
      },
      "ios": {
        "plist": [
          {
            "key": "NSLocationWhenInUseUsageDescription",
            "string": "需要您的地理位置信息以提供定位服务"
          },
          {
            "key": "NSLocationAlwaysUsageDescription",
            "string": "需要您的地理位置信息以提供定位服务,即使应用在后台运行时"
          }
        ]
      }
    }
  }
}

步骤 2: 动态请求权限(针对 Android 6.0+ 和 iOS 10+)

由于 Android 6.0 和 iOS 10 开始,地理位置权限需要在运行时动态请求。虽然 uni-app 封装了大部分权限请求逻辑,但在某些情况下,你可能需要手动处理。以下是一个简单的示例,展示如何在页面加载时请求权限:

// 在页面 onShow 或 onLoad 生命周期中调用
onLoad() {
  // #ifdef APP-PLUS
  plus.android.requestPermissions(['android.permission.ACCESS_FINE_LOCATION'], function(event) {
    if (event.deniedAlways) {
      console.error('用户总是拒绝授权');
    } else if (event.denied) {
      console.error('用户拒绝授权');
    } else {
      // 请求成功,调用定位功能
      this.chooseLocation();
    }
  }, function(e) {
    console.error('请求权限失败:' + JSON.stringify(e));
  });
  // #endif

  // iOS 权限请求通常由系统自动处理,但可以通过 plist 配置引导用户授权
},
methods: {
  chooseLocation() {
    uni.chooseLocation({
      success: function (res) {
        console.log('定位成功:', res);
      },
      fail: function (err) {
        console.error('定位失败:', err);
      }
    });
  }
}

注意

  • 上述代码示例主要针对 Android 平台的动态权限请求,iOS 平台的权限请求通常通过应用的 Info.plist 文件配置后,系统会自动弹出请求对话框。
  • 确保在调用 uni.chooseLocation 前,用户已经授权地理位置权限,否则调用将失败。
  • 如果问题依旧存在,请检查控制台输出的错误信息,并根据错误信息进一步排查问题。
回到顶部