packagesposition.webjoy.net.sendposition;importandroid.os.Bundle;importandroid.support.design.widget.FloatingActionButton;importandroid.support.v7.app.AppCompatActivity;importandroid.support.v7.widget.Toolbar;importandroid.view.Menu;importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Toast;importcom.baidu.location.BDLocation;importcom.baidu.location.BDLocationListener;importcom.baidu.location.LocationClient;importcom.baidu.location.LocationClientOption;importcom.baidu.mapapi.SDKInitializer;importcom.baidu.mapapi.map.BaiduMap;importcom.baidu.mapapi.map.BitmapDescriptor;importcom.baidu.mapapi.map.BitmapDescriptorFactory;importcom.baidu.mapapi.map.MapStatusUpdate;importcom.baidu.mapapi.map.MapStatusUpdateFactory;importcom.baidu.mapapi.map.MapView;importcom.baidu.mapapi.map.MyLocationConfiguration;importcom.baidu.mapapi.map.MyLocationData;importcom.baidu.mapapi.model.LatLng;public class MainActivity extendsAppCompatActivity {private MapView mMapView = null;privateBaiduMap baiduMap;//定位相关
privateLocationClient locationClient;privateBDLocationListener bdLocationListener;private Boolean isFirstIn = true;//设置用户默认位置//记录经纬度
private doublemLatitude;private doublemlongtitude;//自定义图标
privateBitmapDescriptor mIconLocation;
@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//在使用SDK各组件之前初始化context信息,传入ApplicationContext//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
Toolbar toolbar=(Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab=(FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(newView.OnClickListener() {
@Overridepublic voidonClick(View view) {
centerToMyLocation(mLatitude, mlongtitude);
}
});//初如化地图
initValue();//定位初始化
initPosition();
}/*** 定位到我的位置
*@parammLatitude
*@parammlongtitude*/
private void centerToMyLocation(double mLatitude, doublemlongtitude) {
LatLng latLng= newLatLng(mLatitude, mlongtitude);
MapStatusUpdate msu=MapStatusUpdateFactory.newLatLng(latLng);
baiduMap.animateMapStatus(msu);//重新设置位置
}private voidinitPosition() {
locationClient= new LocationClient(this);
bdLocationListener= newMyLocationListener();
locationClient.registerLocationListener(bdLocationListener);
LocationClientOption clientOption= newLocationClientOption();
clientOption.setCoorType("bd09ll");
clientOption.setIsNeedAddress(true); //返回位置
clientOption.setOpenGps(true);//开启GPS
clientOption.setScanSpan(1000);
locationClient.setLocOption(clientOption);//定位图标
mIconLocation =BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);
}private voidinitValue() {//获取地图控件引用
mMapView =(MapView) findViewById(R.id.bmapView);
baiduMap=mMapView.getMap();
MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.zoomTo(15.0f);
baiduMap.setMapStatus(mapStatusUpdate);
}
@Overridepublic booleanonCreateOptionsMenu(Menu menu) {//Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);return true;
}
@Overridepublic booleanonOptionsItemSelected(MenuItem item) {int id =item.getItemId();switch(id){caseR.id.id_map_common:
{
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}break;caseR.id.id_map_site:
{
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
}break;caseR.id.id_map_traffic:
{if(baiduMap.isTrafficEnabled()){
baiduMap.setTrafficEnabled(false);
}else{
baiduMap.setTrafficEnabled(true);
}
}break;
}return super.onOptionsItemSelected(item);
}
@Overrideprotected voidonDestroy() {super.onDestroy();//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Overrideprotected voidonResume() {super.onResume();//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Overrideprotected voidonPause() {super.onPause();//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}/*** 定义一个监听类*/
private class MyLocationListener implementsBDLocationListener{
@Overridepublic voidonReceiveLocation(BDLocation bdLocation) {//定位成功后的回调
MyLocationData data = new MyLocationData.Builder()// .accuracy(bdLocation.getRadius())//精定
.latitude(bdLocation.getLatitude())//方向
.longitude(bdLocation.getLongitude())
.build();
baiduMap.setMyLocationData(data);//自定义图标
MyLocationConfiguration config = new MyLocationConfiguration(MyLocationConfiguration.LocationMode.NORMAL,true,mIconLocation);
baiduMap.setMyLocationConfigeration(config);
mLatitude=bdLocation.getLatitude();
mlongtitude=bdLocation.getLongitude();if(isFirstIn){//得到经度和纬度
centerToMyLocation(bdLocation.getLatitude(), bdLocation.getLongitude());
isFirstIn= false;
Toast.makeText(MainActivity.this,"定位成功"+bdLocation.getAddrStr(),Toast.LENGTH_SHORT).show();
}
}
}
@Overrideprotected voidonStart() {super.onStart();
baiduMap.setMyLocationEnabled(true);//开启定位
if (!locationClient.isStarted()) {
locationClient.start();
}
}
@Overrideprotected voidonStop() {super.onStop();//不允许定位
baiduMap.setMyLocationEnabled(false);
locationClient.stop();
}
}