uni-app 3.3.13.20220314真机调试 位置信息无法读取address

uni-app 3.3.13.20220314真机调试 位置信息无法读取address

开发环境 版本号 项目创建方式
HBuilderX 3.3.13 云端

产品分类:HTML5+

手机系统:Android

手机系统版本号:Android 11

手机厂商:魅族

手机机型:魅族18

打包方式:云端


示例代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Geolocation Example</title>
<script type="text/javascript" >
// 扩展API加载完毕后调用onPlusReady回调函数
document.addEventListener('plusready', onPlusReady, false);
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady(){
plus.geolocation.getCurrentPosition(function(p){
alert('Geolocation\nLatitude:' + p.coords.latitude + '\nLongitude:' + p.coords.longitude + '\nAltitude:' + p.coords.altitude);
alert('\ncity'+p.address.city)
}, function(e){
alert('Geolocation error: ' + e.message);
} );
}
</script>
</head>
<body >
</body>
</html>

操作步骤:

使用示例代码无误,一旦想取地址信息就出错。alert('\ncity'+p.address.city)

云打包无错误提示。


预期结果:

取得city值


实际结果:

真机官方底座调试提示TypeError: Cannot read properties of undefined (reading ‘city’)


bug描述:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Geolocation Example</title>
<script type="text/javascript" >
// 扩展API加载完毕后调用onPlusReady回调函数
document.addEventListener('plusready', onPlusReady, false);
// 扩展API加载完毕,现在可以正常调用扩展API
function onPlusReady(){
plus.geolocation.getCurrentPosition(function(p){
alert('Geolocation\nLatitude:' + p.coords.latitude + '\nLongitude:' + p.coords.longitude + '\nAltitude:' + p.coords.altitude);
alert('\ncity'+p.address.city)
}, function(e){
alert('Geolocation error: ' + e.message);
} );
}
</script>
</head>
<body >
</body>
</html>
3 回复

配置key


配置过的。以前好好的,更新到最新的HBX版本就不行了。

uni-app 中进行真机调试时,如果遇到位置信息无法读取 address 的问题,可能是由于以下几个原因导致的。以下是一些排查和解决方法:

1. 权限问题

  • 描述: 应用可能没有获取位置信息的权限。
  • 解决方法:
    • 确保在 manifest.json 中已经配置了位置权限:
      {
        "permission": {
          "scope.userLocation": {
            "desc": "你的位置信息将用于小程序位置接口的效果展示"
          }
        }
      }
    • 在真机上检查应用的权限设置,确保已经允许应用访问位置信息。

2. API 使用问题

  • 描述: 可能在使用 uni.getLocationuni.chooseLocation 时,没有正确处理返回的数据。
  • 解决方法:
    • 确保正确调用 uni.getLocationuni.chooseLocation,并处理返回的数据:
      uni.getLocation({
        type: 'wgs84',
        success: function (res) {
          console.log('经度:' + res.longitude);
          console.log('纬度:' + res.latitude);
          // 如果需要获取地址信息,可以使用逆地理编码 API
          uni.request({
            url: 'https://restapi.amap.com/v3/geocode/regeo',
            data: {
              key: '你的高德地图API Key',
              location: res.longitude + ',' + res.latitude
            },
            success: function (res) {
              console.log('地址信息:', res.data.regeocode.formatted_address);
            }
          });
        },
        fail: function (err) {
          console.log('获取位置信息失败:', err);
        }
      });

3. 高德地图或腾讯地图 API Key 问题

  • 描述: 如果使用高德地图或腾讯地图的逆地理编码服务,可能需要配置正确的 API Key。
  • 解决方法:
    • 确保在 manifest.json 中配置了正确的高德地图或腾讯地图的 API Key:
      {
        "mp-weixin": {
          "appid": "你的小程序AppID",
          "setting": {
            "urlCheck": false,
            "es6": true,
            "postcss": true,
            "minified": true
          },
          "permission": {
            "scope.userLocation": {
              "desc": "你的位置信息将用于小程序位置接口的效果展示"
            }
          },
          "plugins": {
            "chooseLocation": {
              "version": "1.0.6",
              "provider": "wx76a9a06e5b4e693e"
            }
          },
          "requiredPrivateInfos": [
            "getLocation",
            "chooseLocation"
          ],
          "sdkConfigs": {
            "geolocation": {
              "provider": "amap",
              "key": "你的高德地图API Key"
            }
          }
        }
      }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!