百度地图之定自己当前的位置

来源:互联网 发布:剑三捏脸数据网站 编辑:程序博客网 时间:2024/05/18 00:21

1,导入定位包-----------定位有自己特定的包

2,其他的与百度基础定位配置相同

3,开始写代码:



public class MainActivity extends Activity {
boolean flag=true;
 MapView mMapView = null; 
BaiduMap map=null;
PoiSearch mSearch=null;
Button btn_search;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();




protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

SDKInitializer.initialize(getApplicationContext());  
  setContentView(R.layout.activity_main);   
  btn_search=(Button) findViewById(R.id.btn_search);

mMapView=(MapView) findViewById(R.id.bmapView);

   map=mMapView.getMap();

   onCreate() ;
   location();
   mLocationClient.start();

}

}
/***
* 第一步,初始化LocationClient类
此处需要注意:LocationClient类必须在主线程中声明,需要Context类型的参数。
Context需要时全进程有效的Context,推荐用getApplicationConext获取全进程有效的Context。


* */
public void onCreate() {
   mLocationClient = new LocationClient(getApplicationContext());     
   //声明LocationClient类
   mLocationClient.registerLocationListener( myListener );    
   //注册监听函数
}
/*
* 第二步,配置定位SDK参数
设置定位参数包括:定位模式(高精度定位模式、低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、
位置语义化信息、POI信息等等。
LocationClientOption类,该类用来设置定位SDK的定位方式,例如:

* ***/

private void location(){
   LocationClientOption option = new LocationClientOption();
   option.setLocationMode(LocationMode.Battery_Saving);
   //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
 
   option.setCoorType("bd09ll");
   //可选,默认gcj02,设置返回的定位结果坐标系
 
   int span=1000;
   option.setScanSpan(span);
   //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
 
   option.setIsNeedAddress(true);
   //可选,设置是否需要地址信息,默认不需要
 
   option.setOpenGps(true);
   //可选,默认false,设置是否使用gps
 
   option.setLocationNotify(true);
   //可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
 
   option.setIsNeedLocationDescribe(true);
   //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
 
   option.setIsNeedLocationPoiList(true);
   //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
 
   option.setIgnoreKillProcess(false);
   //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死  
 
   option.SetIgnoreCacheException(false);
   //可选,默认false,设置是否收集CRASH信息,默认收集
 
   option.setEnableSimulateGps(false);
   //可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
 
   mLocationClient.setLocOption(option);
}
/***
* 第三步,实现BDLocationListener接口
BDLocationListener为结果监听接口,异步获取定位结果,实现方式如下:
* **/


public class MyLocationListener implements BDLocationListener {

@Override
public void onReceiveLocation(BDLocation bdLocation) {
Double latitude = bdLocation.getLatitude();
Double longitude = bdLocation.getLongitude();
MarkerOptions options = new MarkerOptions().icon(
BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))
.position(new LatLng(latitude, longitude));
// 首先清除图层 不然当位置改变的时候图层会叠加
map.clear();
map.addOverlay(options);
LatLng latLng = new LatLng(latitude, longitude);
//设置当前位置的缩放级别。---绑定的是当前的位置,因此这句话一定需要

map.setMapStatus(MapStatusUpdateFactory.newLatLngZoom(latLng,
17.0f));
System.err.println("llllllllllaaa" + latLng.toString());
}

}
@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();  
       }  
   
}

0 0