Android-百度定位API使用方法

百度定位API使用方法

导入库文件

在下载页面下载最新的库文件。将liblocSDK2.4.so文件拷贝到libs/armeabi目录下。将locSDK2.4.jar文件拷贝到工程根目录下(libs根目录下),并在工程属性->Java Build Path->Libraries中选中“Add JARs”,选定locSDK2.4.jar.确定后返回。这样您就可以在程序中使用百度定位API了。

设置AndroidManifest.xml

为区分2.3版本service,需要将manifest file中的intent filter声明为com.baidu.location.service_v2.4在application标签中声明service组件。







声明使用权限













import相关类

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.location.BDNotifyListener;//假如用到位置提醒功能,需要import该类

功能类的使用

初始化LocationClient类

此处需要注意:LocationClient类必须在主线程中声明。需要Context类型的参数。

public LocationClient     mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();

public void onCreate() {
mLocationClient = new LocationClient(this); //声明LocationClient类
mLocationClient.registerLocationListener(myListener);//注册监听函数
}
实现BDLocationListener接口

BDLocationListener接口有2个方法需要实现:

  1. 接收异步返回的的定位结果,参数是BDLocation类型参数。

  2. 接收异步返回的POI查询结果,参数是BDLocation类型参数。

     public class MyLocationListener implements BDLocationListener{
     @override
     public void onReceiveLocation(BDLocation location) {
     if(location == null)
     return;
     StringBuffer sb = new StringBuffer(256);
     sb.append("time:");
     sb.append(location.getTime());
     sb.append("\nerror code:");
     sb.append(location.getLocType());
     sb.append("\nlatitude : ");
     sb.append(location.getLatitude());
     sb.append("\nlontitude : ");
     sb.append(location.getLongitude());
     sb.append("\nradius : ");
     sb.append(location.getRadius());
     if (location.getLocType() == BDLocation.TypeGpsLocation){
     sb.append("\nspeed : ");
     sb.append(location.getSpeed());
     sb.append("\nsatellite : ");
     sb.append(location.getSatelliteNumber());
     } 
     else if (location.getLocType() == BDLocation.TypeNetWorkLocation){
     sb.append("\naddr : ");
     sb.append(location.getAddrStr());
     } 
     logMsg(sb.toString());
     }
      public void onReceivePoi(BDLocation poiLocation) {
     if (poiLocation == null){
     return ;
     }
     StringBuffer sb = new StringBuffer (256);
     sb.append("Poi time : ");
     sb.append(poiLocation.getTime());
     sb.append("\nerror code : ");
     sb.append(poiLocation.getLocType());
     sb.append("\nlatitude : ");
     sb.append(poiLocation.getLatitude());
     sb.append("\nlontitude : ");
     sb.append(poiLocation.getLongitude());
     sb.append("\nradius : ");
     sb.append(poiLocation.getRadius());
     if (poiLocation.getLocType() == BDLocation.TypeNetWorkLocation){
     sb.append("\naddr : ");
      sb.append(poiLocation.getAddrStr());
     } 
     if(poiLocation.hasPoi()){
     sb.append("\nPoi:");
     sb.append(poiLocation.getPoi());
     }else{ 
       sb.append("noPoi information");
       }
       logMsg(sb.toString());
         }
    
设置参数

设置定位参数包括:定位模式(单次定位;定时定位),返回坐标类型,是否打开GPS等待。
eg:

LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
 option.setAddrType("detail");
option.setCoorType("gcj02");
option.setScanSpan(5000);
option.disableCache(true);//禁止启用缓存定位
option.setPoiNumber(5); //最多返回POI个数 
option.setPoiDistance(1000); //poi查询距离 
option.setPoiExtraInfo(true); //是否需要POI的电话和地址等详细信息 
mLocClient.setLocOption(option);
发起定位请求

发起定位请求。请求过程是异步的,定位结果在上面的监听函数onReceiveLocation中获取。

if (mLocClient != null && mLocClient.isStarted())
mLocClient.requestLocation();
else 
Log.d("LocSDK_2.0_Demo1", "locClient is null or not   started");
发起POI请求

发起POI查询请求。请求过程是异步的,定位结果在上面的监听函数onReceiverPoi中后去。

if (mLocClient != null && mLocClient.isStarted())
mLocClient.requestPoi();
位置提醒使用

位置提醒最多提醒3次,3次过后将不再提醒。 假如需要再次提醒,或者要修改提醒点坐标,都可通过函数SetNotifyLocation()来实现。

//位置提醒相关代码
mNotifyer = new NotifyLister();
mNotifyer.SetNotifyLocation(42.03249652949337,113.3129895882556,3000,"gps");//4个参数代表要位置提醒的点的坐标,具体含义依次为:纬度,经度,距离范围,坐标系类型(gcj02,gps,bd09,bd09ll)
mLocationClient.registerNotify(mNotifyer);
//注册位置提醒监听事件后,可以通过SetNotifyLocation 来修改位置提醒设置,修改后立刻生效。

//BDNotifyListner实现
public class NotifyLister extends BDNotifyListener{
public void onNotify(BDLocation mlocation, float distance){
mVibrator01.vibrate(1000);//振动提醒已到设定位置附近
}
}

//取消位置提醒
mLocationClient.removeNotifyEvent(mNotifyer);

核心类

LocationClient类
用来发起定位,添加取消监听
LocationClientOption类
用来设置定位方式,包括是否启用缓存,使用GPS,时间间隔等。
BDLocation类
定位结果的封装,包含坐标信息和错误代码等信息。
BDLocationListener接口类
获取定位结果
BDNotifyListener类
作用:位置提醒接口类,用于设置位置提醒点,以及实现监听函数。这个应该是适用于地图。

使用方法:

定位是以service方式在运行,所以需要在manifest.xml中声明service组件。

声明权限


MapView显示地图(百度API)

添加相关文档

在application中添加开发秘钥

 
 

添加所需权限

布局


在应用程序创建时初始化SDK引用的Context全局变量:

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入    
ApplicationContext   //注意该方法要再
setContentView方法之前实现   
SDKInitializer.initialize(getApplicationContext());   
setContentView(R.layout.activity_main);  
} 
}

管理地图生命周期

public class MainActivity extends Activity
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext   
//注意该方法要再setContentView方法之前实现   
SDKInitializer.initialize(getApplicationContext());   
setContentView(R.layout.activity_main);   
//获取地图控件引用   
mMapView = (MapView)     
findViewById(R.id.bmapView);  
}  
@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();   
}      
}

到这里就可以显示地图了,但是没有定位。


Android使用百度LBS SDK--定位实现

分别声明一个MapView和BaiduMap:

private MapView mMapView;
private BaiduMap mBaiduMap;

在setContentView之前要初始化SDK
SDKInitializer.initialize(getApplication());

更换定位图标的方法

mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo); // 自定义图标
// mCurrentMarker =null ; // 默认图标
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));

定位模式:

private LocationMode mCurrentMode;
mCurrentMode = LocationMode.NORMAL;//普通模式
//mCurrentMode = LocationMode.FOLLOWING;//跟随模式
//mCurrentMode = LocationMode.COMPASS;//罗盘模式
mBaiduMap.setMyLocationConfigeration(new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker));

初始化:

//地图初始化
mMapView = (MapView) findViewById(R.id.bmapView);
    mBaiduMap = mMapView.getMap();
    // 开启定位图层
mBaiduMap.setMyLocationEnabled(true);
    // 定位初始化
    mLocClient = new LocationClient(this);
    mLocClient.registerLocationListener(myListener);
    LocationClientOption option = new LocationClientOption();
    option.setOpenGps(true);// 打开gps
    option.setCoorType("bd09ll"); // 设置坐标类型
    option.setScanSpan(5000);
    mLocClient.setLocOption(option);
    mLocClient.start();

setScanSpan是定位时间间隔(ms),
setCoorType坐标类型分为三种:
bd09ll百度加密经纬度坐标
bd09百度加密墨卡托坐标
gcj02国测局加密经纬度坐标

定位SDK监听函数

public class MyLocationListener implements BDLocationListener{
@Override

public void onReceiveLocation(BDLocation location){
if(location ==null||mMapView = null)
return;
MylocationData = locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
// 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData);
if (isFirstLoc) {
isFirstLoc = false;
LatLng ll = new LatLng(location.getLatitude(),
location.getLongitude());
MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
mBaiduMap.animateMapStatus(u);
}
}
public void onReceivePoi(BDLocation poiLocation) {
}
}


参考

Android使用百度LBS SDK(一)显示地图MapView

http://blog.csdn.net/zhoumushui/article/details/41751259?utm_source=tuicool&utm_medium=referral

你可能感兴趣的:(Android-百度定位API使用方法)