package zjc.bwie.com.baidutext;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.Window;
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.MapStatus;
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 Activity {
public MapView mMapView = null;
public LocationClient mLocationClient = null;
public MyLocationListenner myListener = new MyLocationListenner();
public BaiduMap mMapViewMap;
boolean isFirstLoc = true; // 是否首次定位
//每次定位后,获取经纬度
private double X;
private double Y;
//自定义定位图标
private BitmapDescriptor myiconLoaction;
//实例化传感器对象
private MyorientationListener myorientationListener;
//记录传感器的x坐标
private float CurrentX;
//模式变量
private MyLocationConfiguration.LocationMode locationmode = MyLocationConfiguration.LocationMode.NORMAL;
;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
mMapViewMap = mMapView.getMap();
//设置页面比例
MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomTo(20.0f);
mMapViewMap.setMapStatus(mapStatusUpdate);
//定位功能
makePosition();
}
@Override
protected void onStart() {
//设置定位允许
mMapViewMap.setMyLocationEnabled(true);
//开启定位
if (!mLocationClient.isStarted()) {
mLocationClient.start();
}
//开启方向传感器
myorientationListener.start();
super.onStart();
}
@Override
protected void onStop() {
//停止定位
mMapViewMap.setMyLocationEnabled(false);
mLocationClient.stop();
//关闭方向传感器
myorientationListener.stop();
super.onStop();
}
public void makePosition() {
// 开启定位图层
mMapViewMap.setMyLocationEnabled(true);
mMapViewMap
.setMyLocationConfigeration(new MyLocationConfiguration(
locationmode, true, null));
mLocationClient = new LocationClient(this);
mLocationClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setIsNeedAddress(true);//可以帮助我们获取当前的地址
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
//初始化图标
myiconLoaction = BitmapDescriptorFactory.fromResource(R.mipmap.navi_map_gps_locked);
//实例化传感器对象
myorientationListener = new MyorientationListener(this);
myorientationListener.setOnorientationListener(new MyorientationListener.OnorientationListener() {
@Override
public void onOreationChanged(float x) {
CurrentX = x;
}
});
}
/**
* 设置Menu菜单的布局
*
* @param menu
* @return
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//设定自定义布局
getMenuInflater().inflate(R.menu.menu_layout, menu);
return true;
}
/**
* Menu菜单按钮的点击事件
*
* @param item
* @return
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.comment://切换普通地图状态
mMapViewMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
break;
case R.id.site://切换卫星地图
mMapViewMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
break;
case R.id.traffic://切换实时交通地图
if (mMapViewMap.isTrafficEnabled()) {
mMapViewMap.setTrafficEnabled(false);
} else {
mMapViewMap.setTrafficEnabled(true);
}
break;
case R.id.myPosition:
//定位当前位置
madePosition();
break;
case R.id.model_comment:
locationmode = MyLocationConfiguration.LocationMode.NORMAL;
break;
case R.id.model_fllow://跟随模式
locationmode = MyLocationConfiguration.LocationMode.FOLLOWING;
break;
case R.id.model_luopan://罗盘模式
locationmode = MyLocationConfiguration.LocationMode.COMPASS;
break;
}
return super.onOptionsItemSelected(item);
}
public void madePosition() {
LatLng ll = new LatLng(X,
Y);
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mMapViewMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
}
@Override
protected void onDestroy() {
// 退出时销毁定位
mLocationClient.stop();
// 关闭定位图层
mMapViewMap.setMyLocationEnabled(false);
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
mMapView = null;
super.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();
}
/**
* 定位SDK监听函数
*/
public class MyLocationListenner implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// map view 销毁后不在处理新接收的位置
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息
.direction(CurrentX)
.latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mMapViewMap.setMyLocationData(locData);
//设置自定义的图标,这里使用的是自定义的图标
MyLocationConfiguration configuration = new MyLocationConfiguration(locationmode, true, myiconLoaction);
mMapViewMap.setMyLocationConfigeration(configuration);
//更新,并记录当前的经纬度
X = location.getLatitude();
Y = location.getLongitude();
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll).zoom(18.0f);
mMapViewMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
//吐司当前的位置信息
Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}
<strong><span style="font-size:24px;">补充Demo下载地址 :http://download.youkuaiyun.com/detail/dm_jc/9585160</span></strong>