package com.map;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.map.LocationData;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationOverlay;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class LocationActivity extends Activity{
BMapManager bMapManager;
MapView mapView;
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bMapManager=new BMapManager(getApplication());
bMapManager.init("0A1a131b800cea086f14cc941981e9b2", null);
setContentView(R.layout.activity_location);
mapView=(MapView)findViewById(R.id.bmapsView_location);
//:LocationClient类必须在主线程中声明。需要Context类型的参数。
mLocationClient=new LocationClient(this);
注册监听函数
mLocationClient.registerLocationListener(myListener);
/*
*
* 设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等
*
* */
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setAddrType("all");//返回的定位结果包含地址信息
option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02
//不设置扫描间隔就是只定位一次,设置发起定位请求的间隔时间为2000ms
option.setScanSpan(2000);
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数
option.setPoiDistance(1000); //poi查询距离
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息
mLocationClient.setLocOption(option);
mLocationClient.start();//如果没有Start,就无法显示地图
mapView.getController().setZoom(15);
//注册位置提醒监听事件后,可以通过SetNotifyLocation 来修改位置提醒设置,修改后立刻生效。
/*发起定位请求。请求过程是异步的,定位结果在监听函数onReceiveLocation中获取 */
if (mLocationClient!=null&&mLocationClient.isStarted())
mLocationClient.requestLocation();
else
Log.d("LocSDK3", "Locationclient is null or not started");
/*发起POI查询请求。请求过程是异步的,定位结果在上面的监听函数onReceivePoi中获取。
*
* */
if (mLocationClient != null && mLocationClient.isStarted())
mLocationClient.requestPoi();
}
/*实现BDLocationListener接口
BDLocationListener接口有2个方法需要实现:
1.接收异步返回的定位结果,参数是BDLocation类型参数。
2.接收异步返回的POI查询结果,参数是BDLocation类型参数。*/
class MyLocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation location) {
GeoPoint geoPoint=new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));
MyLocationOverlay myLocationOverlay=new MyLocationOverlay(mapView);
LocationData locationData=new LocationData();
locationData.latitude=location.getLatitude();
locationData.longitude=location.getLongitude();
locationData.direction=2.0f;
myLocationOverlay.setData(locationData);
mapView.getOverlays().clear();
mapView.getOverlays().add(myLocationOverlay);
mapView.refresh();
mapView.getController().animateTo(geoPoint);
}
@Override
public void onReceivePoi(BDLocation arg0) {
}
}
//---------------------
@Override
protected void onDestroy(){
mapView.destroy();
if(bMapManager!=null){
bMapManager.destroy();
bMapManager=null;
}
super.onDestroy();
}
@Override
protected void onPause(){
mapView.onPause();
if(bMapManager!=null){
bMapManager.stop();
}
super.onPause();
}
@Override
protected void onResume(){
mapView.onResume();
if(bMapManager!=null){
bMapManager.start();
}
super.onResume();
}
}
Android百度定位API使用方法
最新推荐文章于 2021-05-27 22:23:57 发布