1、​​酷跑项目:崩溃自动重启功能​​ 2、酷跑项目:首页跳转+底部菜单联动

前提

  1. 百度地图开放平台注册账号
  2. 进入控制台,创建应用
  3. 打开开发文档菜单,找到Android开发,查看Android 地图SDK,了解相关功能
  4. 按照左侧开发指南中Android Studio配置阅读相关开发步骤,进行开发
  5. 在SDK下载中可下载相关开发包和全部功能Demo来参考

开发

创建地图,先显示出来试一下

【达内课程】酷跑项目:百度地图获取定位_git

实现定位功能
根据​​​显示定位​​这一节,可以获取当前经纬度

这里我们实现的功能有:获取当前定位并在当前位置显示一张图片、点击地图获取点击位置的经纬度

【达内课程】酷跑项目:百度地图获取定位_百度地图_02


【达内课程】酷跑项目:百度地图获取定位_git_03


ShopFragment

public class SportFragment extends Fragment {
private MapView mMapView = null;
//定位
LocationClient mLocationClient;
private BaiduMap mBaiduMap;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_sport,null);
//获取地图控件引用
mMapView = (MapView) view.findViewById(.bmapView);
mBaiduMap = mMapView.getMap();

//定位初始化
mLocationClient = new LocationClient(getActivity());
MyLocationListener listener = new MyLocationListener();
mLocationClient.registerLocationListener(listener);
//设置定位参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1);// 每隔多少毫秒获取一次坐标,这里是1s
//option.setScanSpan(1000);// 每隔多少毫秒获取一次坐标,这里是1s
//如果小于1000,只获取1次,如果想再次定位则使用以下方法
//mLocationClient.requestLocation();
//设置locationClientOption
mLocationClient.setLocOption(option);
//开启地图定位图层
mLocationClient.start();
return view;
}

@Override
public void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
public void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}

class MyLocationListener extends BDAbstractLocationListener{

@Override
public void onReceiveLocation(BDLocation bdLocation) {
//经度
double longitude = bdLocation.getLongitude();
//纬度
final double latitude = bdLocation.getLatitude();

Log.d("Debug","经度:"+longitude+",纬度:"+latitude);

//移动地图
LatLng latLng = new LatLng(latitude,longitude);
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.newLatLngZoom(latLng,17);
mBaiduMap.animateMapStatus(mapStatusUpdate);

//显示图片
MarkerOptions options = new MarkerOptions();
options.position(latLng);
BitmapDescriptor bitmapDescriptor = BitmapDescriptorFactory.fromResource(R.mipmap.icon_marker);
options.icon(bitmapDescriptor);
mBaiduMap.addOverlay(options);

//在地图上单击
mBaiduMap.setOnMapClickListener(new BaiduMap.OnMapClickListener() {
@Override
public void onMapClick(LatLng latLng) {
//清除地图上的图片
mBaiduMap.clear();
Log.d("Debug","单击的位置是:"+latLng.latitude+","+latLng.longitude);
//单击的位置显示图片
MarkerOptions options = new MarkerOptions();
options.position(latLng);
options.icon(BitmapDescriptorFactory.fromResource(R.mipmap.icon_marker));
mBaiduMap.addOverlay(options);
}

@Override
public boolean onMapPoiClick(MapPoi mapPoi) {
return false;
}
});
}
}
}

​注意:用真机测试,同时权限中同意定位权限​

这里我们打印了经纬度,获取经纬度后,可以在百度拾取坐标系统中验证

可能出现的问题

setScanSpan()方法不起作用

上边代码中每隔1s定位一次,可能会出现的情况是,只定位了一次,然后就不再定位了。原因可能是AndroidManifest中没有在application中增加以下代码

<service android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>