作者:黄丽敏 时间:2013-07-27
百度地图Android定位SDK为基于移动客户端开发LBS应用提供基础定位能力,它较百度Android 地图SDK而言,专注满足用户获取当前位置与获得地址信息描述功能,软件包体积小。功能更多,接口更友好。
百度Android定位SDK支持Android1.5以及以上设备,提供:
▪
定位功能:通过GPS、网络定位(WIFI、基站)混合定位模式,返回当前所处的位置信息
▪
反地理编码功能:解析当前所处的位置坐标,获得详细的地址描述信息。
定位SDK支持多样化服务与定位策略,用户可通过设置不同的定位时间间隔、选择不同的定位服务模式、定制不同的定位结果信息来满足自身需求。
定位原理
使用百度Android定位SDK必须注册GPS和网络使用权限。定位SDK采用GPS、基站、Wi-Fi信号进行定位。当应用程序向定位SDK发起定位请求时,定位SDK会根据应用的定位因素(GPS、基站、Wi-Fi信号)的实际情况(如是否开启GPS、是否连接网络、是否有信号等)来生成相应定位依据进行定位。
用户可以设置满足自身需求的定位依据:
若用户设置GPS优先,则优先使用GPS进行定位,如果GPS定位未打开或者没有可用位置信息,且网络连接正常,定位SDK则会返回网络定位(即Wi-Fi与基站)的最优结果。为了使获得的网络定位结果更加精确,请打开手机的Wi-Fi开关。
定位精度
使用步骤:
导入库文件
在下载最新的库文件。将liblocSDK3.so文件拷贝到libs/armeabi目录下。将locSDK3.3.jar文件拷贝到工程的libs目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定locSDK3.3.jar,确定后返回。
设置AndroidManifest.xml
在application标签中声明service组件,为了避免各个app公用1个service出现的权限问题,新版本各个app单独拥有自己的定位service.
android:enabled=\"true\" android:process=\":remote\">
声明使用权限
具体操作
1.初始化LocationClient类
LocationClient类必须在主线程中声明。
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
//声明LocationClient类
mLocationClient = new LocationClient( getApplicationContext());
//注册监听函数
mLocationClient.registerLocationListener( myListener ); }
2.实现BDLocationListener接口
BDLocationListener接口有2个方法需要实现: 1.接收异步返回的定位结果,参数是BDLocation类型参数。 2.接收异步返回的POI查询结果,参数是BDLocation类型参数。
Public class MyLocationListener implements BDLocationListener {
@Override
Public void onReceiveLocation(BDLocation location) {
}public void onReceivePoi(BDLocation poiLocation) {
}
3.设置参数
设置定位参数包括:定位模式(单次定位,定时定位),返回坐标类型,是否打开GPS等等。例如
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setAddrType(\"all\");//返回的定位结果包含地址信息
option.setCoorType(\"bd09ll\");//返回的定位结果是百度经纬度,默认值gcj02
option.setScanSpan(5000);//设置发起定位请求的间隔时间为5000ms
option.disableCache(true);//禁止启用缓存定位 。。。 4.发起定位请求
发起定位请求。请求过程是异步的,定位结果在上面的监听函数onReceiveLocation中获
取。
if(mLocClient != null && mLocClient.isStarted())
mLocClient.requestLocation();
else Log.d(\"LocSDK3\", \"locClient is null or not started\");
5.发起POI查询请求
if(mLocClient != null && mLocClient.isStarted())
mLocClient.requestPoi();
需要注意的问题
▪
定位SDK必须注册GPS和网络的使用权限。
▪
使用定位SDK请保证网络连接通畅(GPS定位方式不需要连网)。
▪
我们强烈建议您设置自己的prodName,并保管好,这样方便我们为您提供更好的定位服
务。
▪
若需要返回的定位结果里包含地址信息,请保证网络连接。
▪
定位SDK可以返回bd09、bd09ll、gcj02三种类型坐标,若需要将定位点的位置通过百
度Android地图 SDK进行地图展示,请返回bd09ll,将无偏差的叠加在百度地图上。
▪
有的移动设备锁屏后为了省电会自动关闭网络连接,此时网络定位模式的定位失效。此外,
锁屏后移动设备若进入cpu休眠,定时定位功能也失效。若您需要实现在cpu休眠状态仍需定时定位,可以用alarmManager 实现1个cpu可叫醒的timer,定时请求定位。
运行效果如图所示:
因篇幅问题不能全部显示,请点此查看更多更全内容