本文基于最新的百度地图定位SDK(V4.0 版本)使用的定位Demo
使用百度地图SDK进行实时定位的主要有6步:
// 启用定位 mBaiduMap.setMyLocationEnabled(true); // 1. 初始化LocationClient类 mLocationClient = new LocationClient(getApplicationContext()); // 2. 声明LocationListener类(负责监听位置变化) locationListener = new MyLocationListener(); // 3. 注册监听函数 mLocationClient.registerLocationListener(locationListener); // 4. 设置参数 LocationClientOption clientOption = new LocationClientOption(); clientOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);// 设置定位模式 clientOption.setCoorType("bd09ll"); // 设置定位结果类型 clientOption.setScanSpan(5000); // 设置发起定位请求的时间间隔,ms clientOption.setIsNeedAddress(true); // 设置返回的定位结果包含地址信息 clientOption.setNeedDeviceDirect(true);// 设置返回结果包含手机的方向 // 5. 应用上面的参数 mLocationClient.setLocOption(clientOption); // 6. 注册位置提醒监听事件 // 7. 开启/关闭 定位SDK mLocationClient.start(); mLocationClient.stop(); 为了实时监听我们位置的变化,我们需要实现BDLocationListener类,获得系统实时的位置信息,并重载onReceiveLocation方法返回位置结果 class MyLocationListener implements BDLocationListener { // 异步返回的定位结果 @Override public void onReceiveLocation(BDLocation bdLocation) { if (bdLocation == null) { return; } locType = bdLocation.getLocType(); Toast.makeText(MainActivity.this, "当前定位的返回值是:" + locType, Toast.LENGTH_SHORT).show(); longitude = bdLocation.getLongitude(); latitude = bdLocation.getLatitude(); if (bdLocation.hasRadius()) {// 判断是否有定位精度半径 radius = bdLocation.getRadius(); } if (locType == BDLocation.TypeGpsLocation) {// Toast.makeText(MainActivity.this, "当前速度是:" + bdLocation.getSpeed() + "定位使用卫星数量:" + bdLocation.getSatelliteNumber(), Toast.LENGTH_SHORT).show(); } else if (locType == BDLocation.TypeNetWorkLocation) { addrStr = bdLocation.getAddrStr();// 获取反地理编码(文字描述的地址) Toast.makeText(MainActivity.this, addrStr, Toast.LENGTH_SHORT).show(); } direction = bdLocation.getDirection();// 获取手机方向,【0~360°】,手机上面正面朝北为0° province = bdLocation.getProvince(); // 省份 city = bdLocation.getCity(); // 城市 district = bdLocation.getDistrict(); // 区县 Toast.makeText(MainActivity.this, province + "~" + city + "~" + district, Toast.LENGTH_SHORT).show(); // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(radius) // 定位精度半径 .direction(direction) // 方向 .latitude(latitude) // 纬度 .longitude(longitude) // 精度 .build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); LatLng ll = new LatLng(latitude, longitude); MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(ll); mBaiduMap.animateMapStatus(msu); } }