uni-app中uni.getLocation加geocode: true,首次调用正常返回,后续调用均报CODE -1502错误

发布于 1周前 作者 sinazl 来自 uni-app

uni-app中uni.getLocation加geocode: true,首次调用正常返回,后续调用均报CODE -1502错误

产品分类

uniapp/App

示例代码:

uni.getLocation({  
   type: 'gcj02',  
   geocode: true,  
   success: () => {  
      // 代码  
   },  
   fail: () => {  
     // 代码  
   }
})

操作步骤:

uni.getLocation({  
   type: 'gcj02',  
   geocode: true,  
   success: () => {  
      // 代码  
   },  
   fail: () => {  
     // 代码  
   }
})

预期结果:

期待的是每一次调用都能正常从success反馈中获取信息

实际结果:

只有第一次才能从成功的反馈中拿到,后面再调用就会走到fail里面,显示code为-1502的错误

bug描述:

在IOS的自定义基座下安装的APP,设置中已经设置了始终获取地址,但是APP启动的时候第一次调用 uni.getLocation({ type: 'gcj02', geocode: true, success: () => {}, fail: () => {} }),会获得参数,但是接下来就全部走入fail方法中,报错信息为:

{
"errMsg": "getLocation:fail Error Domain=PGLocation Code=2 \"不能获取到位置\" UserInfo={NSLocalizedDescription=不能获取到位置},https://ask.dcloud.net.cn/article/282",
"errCode": -1502,
"code": -1502
}

但是如果去掉了geocode: true,那么调用就不会报错

开发环境与版本信息

项目创建方式 PC开发环境操作系统 PC开发环境操作系统版本号 HBuilderX类型 HBuilderX版本号 手机系统 手机系统版本号 手机厂商 手机机型 页面类型 vue版本 打包方式
HBuilderX Windows win10 正式 4.45 iOS iOS 16 苹果 iphone 8 vue vue2 云端

2 回复

一样的情况,解决了吗,唉


在uni-app中使用uni.getLocation并设置geocode: true时,首次调用能正常返回位置信息及其地理编码(地址),但后续调用出现CODE -1502错误,通常是因为权限问题或定位服务未正确重置。CODE -1502错误通常指的是定位失败,可能是由于权限被拒绝、定位服务被禁用或系统定位服务异常等原因。

这里有几个可能的解决方案,但基于你的要求,我将直接提供一个代码案例,展示如何在uni-app中安全地请求位置信息,并处理可能的错误情况,尤其是针对连续调用的问题。注意,这里不会直接解决CODE -1502错误,而是通过合理的调用逻辑来避免或减轻错误的影响。

// 定义一个函数来获取位置信息
function getLocationWithGeocode() {
    return new Promise((resolve, reject) => {
        uni.getLocation({
            type: 'gcj02', // 使用国测局坐标系
            geocode: true,
            success: (res) => {
                resolve(res);
            },
            fail: (err) => {
                console.error('定位失败', err);
                // 如果失败,尝试重新请求权限(仅适用于首次未授权的情况)
                if (err.code === 1) {
                    uni.authorize({
                        scope: 'scope.userLocation',
                        success: () => {
                            // 用户同意授权后再次尝试定位
                            getLocationWithGeocode().then(resolve).catch(reject);
                        },
                        fail: () => {
                            reject(err);
                        }
                    });
                } else {
                    reject(err);
                }
            }
        });
    });
}

// 使用示例
getLocationWithGeocode()
    .then(location => {
        console.log('成功获取位置信息', location);
        // 处理位置信息
    })
    .catch(error => {
        console.error('无法获取位置信息', error);
        // 处理错误情况,可能是提示用户检查权限或重试
    });

// 注意:对于连续调用,确保每次调用前检查定位服务状态和用户权限。
// 如果应用逻辑需要频繁调用定位,考虑实现防抖或节流机制,避免短时间内多次请求。

在实际应用中,如果CODE -1502错误持续出现,可能需要检查设备的定位服务是否开启,以及应用是否有权限持续访问位置信息。在某些情况下,重启设备或重新授权位置访问权限可以解决问题。此外,确保在调用uni.getLocation之前,用户已经授权了位置访问权限,可以通过uni.authorize进行权限请求。

回到顶部