首先按照百度地图给予的帮助将该重写的方法都去重写一遍,该定义的变量都定义一遍
//部件
private MapView mMapView;
private BaiduMap baiduMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
@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();
}
@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();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//初始化视图
initializeView();
}
//初始化视图
private void initializeView()
{
//获取ID
mMapView=(MapView)findViewById(R.id.bmapView);
//获取视图
baiduMap=mMapView.getMap();
//调整比例尺(500米)
MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.zoomTo(15.0f);
baiduMap.setMapStatus(mapStatusUpdate);
baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); //普通模式的地图
baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); //卫星地图
baiduMap.setTrafficEnabled(false); //交通状况(false是关闭,true是开启)
//可以建立一个菜单供用户选择,也可以在initializeView中写死
能够展示完视图后,我们就需要获取GPS的信息并将信息利用到地图当中去,使得能够正确的在地图上完成定位
//定位相关
private LocationClient locationClient; //用于对定位信息进行设置
private MyLocationListener myLocationListener; //监听器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//初始化视图
initializeView();
//初始化位置
initializeLocation();
} //初始化位置
private void initializeLocation()
{
//建立locationClient,用于设置GPS
locationClient=new LocationClient(this);
myLocationListener=new MyLocationListener(baiduMap,this);
locationClient.registerLocationListener(myLocationListener); //注册myLocationListener
//设置GPS的定位方式
LocationClientOption option=new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true); //使能够获取街道信息
option.setOpenGps(true); //开启GPS option.setScanSpan(1000); //1秒刷新1次 //将设定信息传回locationClient中
locationClient.setLocOption(option);
}
同时也要去写myLocationListener的具体实现方法
这个方法是需要接入BDLocationListener的
并且需要重写里面的onReceiveLocation方法,这个方法会在定位信息更变的时候调用
public class MyLocationListener implements BDLocationListener {
//记录是否第一次进入
private boolean IsFirstIn=true;
//定位相关
private BaiduMap baiduMap;
private Context context;
//定位模式
private MyLocationConfiguration.LocationMode locationMode= MyLocationConfiguration.LocationMode.NORMAL;
//经纬度
private double longitude;
private double latitude;
//街道信息
private String streetMessage;
MyLocationListener(BaiduMap baiuduMap,Context context)
{
this.baiduMap=baiuduMap;
this.context=context;
}
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//建立Location的数据
MyLocationData data=new MyLocationData.Builder()
.accuracy(bdLocation.getRadius()) //精度
.latitude(bdLocation.getLatitude()) //经度
.longitude(bdLocation.getLongitude()) //纬度
.build();
//获取数据
baiduMap.setMyLocationData(data);
//获取经纬度
latitude=bdLocation.getLatitude();
longitude=bdLocation.getLongitude();
//获取街道信息
streetMessage=bdLocation.getStreet();
//建立地图的视图(null表示使用默认图标) //若locationMode为null则是默认定位模式 MyLocationConfiguration configuration=new MyLocationConfiguration(locationMode,true,null);
//设置定位模式
baiduMap.setMyLocationConfigeration(configuration);
//如果是第一次登陆将人物位置拉到屏幕中央
if(IsFirstIn)
{
IsFirstIn=false;
MoveToCenter(); //展示街道信息 showStreeMessage();
}
}
public void setLocationMode(MyLocationConfiguration.LocationMode locationMode)
{
this.locationMode=locationMode;
}
public void MoveToCenter()
{
//将屏幕中心移动到当前位置
LatLng latLng=new LatLng(latitude,longitude);
MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(latLng);
baiduMap.animateMapStatus(mapStatusUpdate);
} public void showStreeMessage() { //无法获取街道信息时
if(streetMessage==null)
streetMessage="无法获取街道信息";
//用Toast显示街道信息
Toast toast = Toast.makeText(context,streetMessage,Toast.LENGTH_SHORT);
toast.show();
}
public BaiduMap getBaiduMap() {
return baiduMap;
}
@Override
public void onConnectHotSpotMessage(String s, int i) {
}
}
在这里面的locationMode里提供了几种定位的模式
MyLocationConfiguration.LocationMode.NORMAL //普通模式MyLocationConfiguration.LocationMode.COMPASS //罗盘模式MyLocationConfiguration.LocationMode.FOLLOWING //跟随模式
//这些模式的设定同样可以写死或者建立选项让客户自己选择又或者按照软件需求去使用
这样就可以完成了基本的定位功能了
能够展示完视图后,我们就需要获取GPS的信息并将信息利用到地图当中去,使得能够正确的在地图上完成定位
//定位相关
private LocationClient locationClient; //用于对定位信息进行设置
private MyLocationListener myLocationListener; //监听器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//初始化视图
initializeView();
//初始化位置
initializeLocation();
}
//初始化位置
private void initializeLocation()
{
//建立locationClient,用于设置GPS
locationClient=new LocationClient(this);
myLocationListener=new MyLocationListener(baiduMap,this);
locationClient.registerLocationListener(myLocationListener); //注册myLocationListener
//设置GPS的定位方式
LocationClientOption option=new LocationClientOption();
option.setCoorType("bd09ll");
option.setIsNeedAddress(true); //使能够获取街道信息
option.setOpenGps(true); //开启GPS
option.setScanSpan(1000); //1秒刷新1次
//将设定信息传回locationClient中
locationClient.setLocOption(option);
}
public class MyLocationListener implements BDLocationListener {
//记录是否第一次进入
private boolean IsFirstIn=true;
//定位相关
private BaiduMap baiduMap;
private Context context;
//定位模式
private MyLocationConfiguration.LocationMode locationMode= MyLocationConfiguration.LocationMode.NORMAL;
//经纬度
private double longitude;
private double latitude;
//街道信息
private String streetMessage;
MyLocationListener(BaiduMap baiuduMap,Context context)
{
this.baiduMap=baiuduMap;
this.context=context;
}
@Override
public void onReceiveLocation(BDLocation bdLocation) {
//建立Location的数据
MyLocationData data=new MyLocationData.Builder()
.accuracy(bdLocation.getRadius()) //精度
.latitude(bdLocation.getLatitude()) //经度
.longitude(bdLocation.getLongitude()) //纬度
.build();
//获取数据
baiduMap.setMyLocationData(data);
//获取经纬度
latitude=bdLocation.getLatitude();
longitude=bdLocation.getLongitude();
//获取街道信息
streetMessage=bdLocation.getStreet();
//建立地图的视图(null表示使用默认图标)
//若locationMode为null则是默认定位模式
MyLocationConfiguration configuration=new MyLocationConfiguration(locationMode,true,null);
//设置定位模式
baiduMap.setMyLocationConfigeration(configuration);
//如果是第一次登陆将人物位置拉到屏幕中央
if(IsFirstIn)
{
IsFirstIn=false;
MoveToCenter();
//展示街道信息
showStreeMessage();
}
}
public void setLocationMode(MyLocationConfiguration.LocationMode locationMode)
{
this.locationMode=locationMode;
}
public void MoveToCenter()
{
//将屏幕中心移动到当前位置
LatLng latLng=new LatLng(latitude,longitude);
MapStatusUpdate mapStatusUpdate= MapStatusUpdateFactory.newLatLng(latLng);
baiduMap.animateMapStatus(mapStatusUpdate);
}
public void showStreeMessage()
{
//无法获取街道信息时
if(streetMessage==null)
streetMessage="无法获取街道信息";
//用Toast显示街道信息
Toast toast = Toast.makeText(context,streetMessage,Toast.LENGTH_SHORT);
toast.show();
}
public BaiduMap getBaiduMap() {
return baiduMap;
}
@Override
public void onConnectHotSpotMessage(String s, int i) {
}
}
MyLocationConfiguration.LocationMode.NORMAL //普通模式
MyLocationConfiguration.LocationMode.COMPASS //罗盘模式
MyLocationConfiguration.LocationMode.FOLLOWING //跟随模式
//这些模式的设定同样可以写死或者建立选项让客户自己选择又或者按照软件需求去使用