uniapp开发app时uni.chooseLocation地图显示了但没有地址列表如何解决
在使用uniapp开发APP时,调用uni.chooseLocation接口后地图能正常显示,但地址列表没有展示出来,只有搜索框和地图。请问这是什么原因导致的?需要检查哪些配置或权限?如何解决地址列表不显示的问题?
2 回复
检查是否缺少permission字段,或未配置高德/百度地图key。在manifest.json中配置地图sdk,并确保已申请定位权限。
在UniApp中使用 uni.chooseLocation 时,如果地图显示但地址列表不出现,通常是由于以下原因及解决方案:
常见原因与解决方法
-
权限问题
- 定位权限未开启:确保在App端已获取定位权限(如Android的
ACCESS_FINE_LOCATION)。 - 解决方法:
在manifest.json中配置权限(App模块配置 → Maps → 高德地图/百度地图,勾选并填写Key)。
对于Android,还需在manifest.json的"app-plus" -> "distribute" -> "android"中添加权限:
在代码中动态请求权限:"permissions": [ "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>" ]// 示例:检查并申请定位权限 uni.authorize({ scope: 'scope.userLocation', success: () => { uni.chooseLocation({ success: (res) => { console.log('位置选择成功:', res); } }); }, fail: () => { uni.showModal({ content: '需要定位权限才能使用地址选择功能', showCancel: false }); } });
- 定位权限未开启:确保在App端已获取定位权限(如Android的
-
地图服务商Key配置错误
-
网络或服务异常
- 设备网络不稳定或地图服务接口暂时不可用。
- 解决方法:检查网络连接,或更换网络环境重试。
-
代码调用时机问题
- 在
onLoad等生命周期中直接调用时,页面未完全渲染可能导致异常。 - 解决方法:在
onReady或按钮事件中触发:onReady() { // 确保页面渲染完成后再调用 }
- 在
完整示例代码
export default {
methods: {
chooseLocation() {
// 步骤1:检查定位权限
uni.authorize({
scope: 'scope.userLocation',
success: () => {
// 步骤2:调用地图选择
uni.chooseLocation({
success: (res) => {
console.log('地址:', res.address);
console.log('经纬度:', res.latitude, res.longitude);
},
fail: (err) => {
uni.showToast({
title: '选择失败: ' + err.errMsg,
icon: 'none'
});
}
});
},
fail: () => {
// 引导用户手动开启权限
uni.showModal({
content: '请授权定位权限以使用地址选择功能',
success: (res) => {
if (res.confirm) {
uni.openSetting(); // 跳转设置页
}
}
});
}
});
}
}
}
其他注意事项
- 真机测试:部分问题在模拟器中无法复现,务必使用真机调试。
- 平台差异:iOS需在
manifest.json中配置NSLocationWhenInUseUsageDescription描述。
按照以上步骤排查,通常可解决地址列表不显示的问题。如果问题依旧,检查控制台错误日志或尝试更换地图服务商Key。

