uni-app中uni.getLocation加geocode: true,首次调用正常返回,后续调用均报CODE -1502错误
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 | 云端 |
一样的情况,解决了吗,唉
在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
进行权限请求。