Android百度地图定位getCity()为空

通过打印日志发现
location.getLocType()–>66 address,poi字段是有的,就location.getCity()—>null

查阅百度地图的LocType()返回值:

61 : GPS定位结果,GPS定位成功。

62 : 无法获取有效定位依据,定位失败,请检查运营商网络或者wifi网络是否正常开启,尝试重新请求定位。

63 : 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。

65 : 定位缓存的结果。

66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。

67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。

68 : 网络连接失败时,查找本地离线定位时对应的返回结果。

161: 网络定位结果,网络定位定位成功。

162: 请求串密文解析失败。

167: 服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。

502: key参数错误,请按照说明文档重新申请KEY。

505: key不存在或者非法,请按照说明文档重新申请KEY。

601: key服务被开发者自己禁用,请按照说明文档重新申请KEY。

602: key mcode不匹配,您的ak配置过程中安全码设置有问题,请确保:sha1正确,“;”分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请KEY。

501~700:key验证失败,请按照说明文档重新申请KEY。

可以断定,定位调用的是离线定位,获取city等信息要依赖网络,所以初始化定位的时候可以设置网络优先
option.setPriority(LocationClientOption.NetWorkFirst);//设置网络优先(不设置,默认是gps优先)

// 定位初始化
            mLocClient = new LocationClient(this);
            mLocClient.registerLocationListener(new MyLocationListenner());
            LocationClientOption option = new LocationClientOption();
            option.setOpenGps(true);// 打开gps
            option.setCoorType("bd09ll"); // 设置坐标类型
            option.setPriority(LocationClientOption.NetWorkFirst);//设置网络优先(不设置,默认是gps优先)
            option.setAddrType("all");// 返回的定位结果包含地址信息
            option.setScanSpan(10000);// 设置发起定位请求的间隔时间为10s(小于1秒则一次定位)
            mLocClient.setLocOption(option);
            mLocClient.start();
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的Android百度定位的工具类。 前提条件: 1. 需要在AndroidManifest.xml文件中添加定位权限:ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION 2. 需要在百度开发者平台创建应用并获取到ak ``` public class BaiduLocationUtils { private static final String TAG = "BaiduLocationUtils"; private static final int LOCATION_CODE = 1001; private Context mContext; private LocationClient mLocationClient; private LocationCallback mLocationCallback; public BaiduLocationUtils(Context context) { mContext = context; mLocationClient = new LocationClient(mContext); mLocationCallback = new LocationCallback(); mLocationClient.registerLocationListener(mLocationCallback); } public void startLocation() { if (!checkPermission()) { return; } LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); option.setCoorType("bd09ll"); option.setScanSpan(1000); option.setOpenGps(true); option.setIsNeedAddress(true); mLocationClient.setLocOption(option); mLocationClient.start(); } public void stopLocation() { mLocationClient.stop(); } private boolean checkPermission() { if (ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_CODE); return false; } return true; } private class LocationCallback extends BDAbstractLocationListener { @Override public void onReceiveLocation(BDLocation bdLocation) { if (bdLocation == null) { return; } int locType = bdLocation.getLocType(); if (locType == BDLocation.TypeGpsLocation || locType == BDLocation.TypeNetWorkLocation || locType == BDLocation.TypeOffLineLocation) { stopLocation(); double latitude = bdLocation.getLatitude(); double longitude = bdLocation.getLongitude(); String address = bdLocation.getAddrStr(); String city = bdLocation.getCity(); if (TextUtils.isEmpty(address)) { address = "定位失败"; } Log.i(TAG, "latitude: " + latitude + ", longitude: " + longitude + ", address: " + address + ", city: " + city); // TODO: 定位成功后的操作 } } } } ``` 使用时,在需要定位的地方调用startLocation()方法即可开始定位,调用stopLocation()方法结束定位。当定位成功时,会回调LocationCallback中的onReceiveLocation()方法,其中包含了定位的经纬度、地址和城市信息。在这个方法中可以根据需要进行相应的处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值