package sposition.webjoy.net.sendposition;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.BitmapDescriptorFactory;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;
public class MainActivity extends AppCompatActivity {
private MapView mMapView = null;
private BaiduMap baiduMap;
//定位相关
private LocationClient locationClient;
private BDLocationListener bdLocationListener;
private Boolean isFirstIn = true;//设置用户默认位置
//记录经纬度
private double mLatitude;
private double mlongtitude;
//自定义图标
private BitmapDescriptor mIconLocation;
@Override
protected void onCreate(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(new View.OnClickListener() {
@Override
public void onClick(View view) {
centerToMyLocation(mLatitude, mlongtitude);
}
});
//初如化地图
initValue();
//定位初始化
initPosition();
}
/**
* 定位到我的位置
* @param mLatitude
* @param mlongtitude
*/
private void centerToMyLocation(double mLatitude, double mlongtitude) {
LatLng latLng = new LatLng(mLatitude, mlongtitude);
MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
baiduMap.animateMapStatus(msu);//重新设置位置
}
private void initPosition() {
locationClient = new LocationClient(this);
bdLocationListener = new MyLocationListener();
locationClient.registerLocationListener(bdLocationListener);
LocationClientOption clientOption = new LocationClientOption();
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 void initValue() {
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
baiduMap = mMapView.getMap();
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(15.0f);
baiduMap.setMapStatus(mapStatusUpdate);
}
@Override
public boolean onCreateOptionsMenu(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;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id){
case R.id.id_map_common:
{
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
}
break;
case R.id.id_map_site:
{
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
}
break;
case R.id.id_map_traffic:
{
if (baiduMap.isTrafficEnabled()){
baiduMap.setTrafficEnabled(false);
}else{
baiduMap.setTrafficEnabled(true);
}
}
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
/**
* 定义一个监听类
*/
private class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(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();
}
}
}
@Override
protected void onStart() {
super.onStart();
baiduMap.setMyLocationEnabled(true);//开启定位
if (!locationClient.isStarted()) {
locationClient.start();
}
}
@Override
protected void onStop() {
super.onStop();
//不允许定位
baiduMap.setMyLocationEnabled(false);
locationClient.stop();
}
}