百度SDK定位功能
来源:互联网 发布:java 断点续传 框架 编辑:程序博客网 时间:2024/05/16 08:53
添加定位功能的步骤
- 申请AK(API_KEY)
Android百度定位SDK自v4.0版本之后开始引入了百度地图开放平台的统一AK验证体系。
通过AK机制,开发者可以更方便、更安全地配置自身使用的百度地图资源(如设置服务配额等)。
随着百度地图开放平台的发展,未来您还可通过AK获得更多服务(如提升服务次数、定制化服务等)。
注意:
1.当您选择使用v4.0及之后版本的定位SDK时,需要先申请且配置AK,并在程序相应位置填写您的AK。(选择使用v3.3及之前版本SDK的开发者,不需要使用AK)
2.每个AK仅且唯一对于1个应用验证有效,即对该AK配置环节中使用的包名匹配的应用有效。因此,多个应用(包括多个包名)需申请多个AK,或者对1个AK进行多次配置。
3.若您需要在同一个工程中同时使用Android定位SDK和Android地图SDK,可以使用同一个AK。
参考链接:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/key
用Eclipse工具调试时,查看SHA1 windows -> preferance -> android -> build,若Custom debug keystore的值不为空,则需要使用下面的SHA1 fingerprint
- 环境配置
- 设置AndroidManifest.xml(包括权限设置、Service配置、AcessKey设置)
- 导入Jar包、So库
- 使用baiduMap前,初始化
SDKInitializer.initialize(Context())
- 坐标系说明
目前国内主要有以下三种坐标系:
- WGS84:为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系;
- GCJ02:表示经过国测局加密的坐标;
- BD09:为百度坐标系,其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标;
Android定位SDK产品,支持全球定位,能够精准的获取经纬度信息。根据开发者的设置,在国内获得的坐标系类型可以是:国测局坐标、百度墨卡托坐标 和 百度经纬度坐标。在海外地区,只能获得WGS84坐标。请开发者在使用过程中注意坐标选择。
- 开始定位
- 第一步,初始化LocationClient类
此处需要注意:LocationClient类必须在主线程中声明,需要Context类型的参数。
Context需要时全进程有效的Context,推荐用getApplicationConext获取全进程有效的Context。
public LocationClient mLocationClient = null;
public BDLocationListener myListener = new MyLocationListener();
public void onCreate() {
mLocationClient = new LocationClient(getApplicationContext());
//声明LocationClient类
mLocationClient.registerLocationListener( myListener );
//注册监听函数
}
LocationClient类是定位SDK的核心类,具体方法详见类参考。
- 第二步,配置定位SDK参数
设置定位参数包括:定位模式(高精度定位模式、低功耗定位模式和仅用设备定位模式),返回坐标类型,是否打开GPS,是否返回地址信息、位置语义化信息、POI信息等等。
返回坐标类型包括:
1. gcj02:国测局坐标;
2. bd09:百度墨卡托坐标;
3. bd09ll:百度经纬度坐标;
注意:海外地区定位结果默认、且只能是WGS84类型坐标。
LocationClientOption类,该类用来设置定位SDK的定位方式,例如:
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);
//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系int span=1000;option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要option.setOpenGps(true);//可选,默认false,设置是否使用gpsoption.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);
}
高精度定位模式:这种定位模式下,会同时使用网络定位和GPS定位,优先返回最高精度的定位结果;
低功耗定位模式:这种定位模式下,不会使用GPS进行定位,只会使用网络定位(WiFi定位和基站定位);
仅用设备定位模式:这种定位模式下,不需要连接网络,只使用GPS进行定位,这种模式下不支持室内环境的定位。
4. 第三步,实现BDLocationListener接口
BDLocationListener为结果监听接口,异步获取定位结果,实现方式如下:
public class MyLocationListener implements BDLocationListener {
@Overridepublic void onReceiveLocation(BDLocation location) { //获取定位结果 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){ // GPS定位结果 sb.append("\nspeed : "); sb.append(location.getSpeed()); // 单位:公里每小时 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); //获取卫星数 sb.append("\nheight : "); sb.append(location.getAltitude()); //获取海拔高度信息,单位米 sb.append("\ndirection : "); sb.append(location.getDirection()); //获取方向信息,单位度 sb.append("\naddr : "); sb.append(location.getAddrStr()); //获取地址信息 sb.append("\ndescribe : "); sb.append("gps定位成功"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){ // 网络定位结果 sb.append("\naddr : "); sb.append(location.getAddrStr()); //获取地址信息 sb.append("\noperationers : "); sb.append(location.getOperators()); //获取运营商信息 sb.append("\ndescribe : "); sb.append("网络定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) { // 离线定位结果 sb.append("\ndescribe : "); sb.append("离线定位成功,离线定位结果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("网络不同导致定位失败,请检查网络是否通畅"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机"); } sb.append("\nlocationdescribe : "); sb.append(location.getLocationDescribe()); //位置语义化信息 List<Poi> list = location.getPoiList(); // POI数据 if (list != null) { sb.append("\npoilist size = : "); sb.append(list.size()); for (Poi p : list) { sb.append("\npoi= : "); sb.append(p.getId() + " " + p.getName() + " " + p.getRank()); } } Log.i("BaiduLocationApiDem", sb.toString());}
}
BDLocation类,封装了定位SDK的定位结果,在BDLocationListener的onReceive方法中获取。通过该类用户可以获取错误码,位置的坐标,精度半径等信息。具体方法请参考类参考。
获取定位返回错误码::
public int getLocType ( )
返回值:
61 : GPS定位结果,GPS定位成功。
62 : 无法获取有效定位依据,定位失败,请检查运营商网络或者WiFi网络是否正常开启,尝试重新请求定位。
63 : 网络异常,没有成功向服务器发起请求,请确认当前测试手机网络是否通畅,尝试重新请求定位。
65 : 定位缓存的结果。
66 : 离线定位结果。通过requestOfflineLocaiton调用时对应的返回结果。
67 : 离线定位失败。通过requestOfflineLocaiton调用时对应的返回结果。
68 : 网络连接失败时,查找本地离线定位时对应的返回结果。
161: 网络定位结果,网络定位成功。
162: 请求串密文解析失败,一般是由于客户端SO文件加载失败造成,请严格参照开发指南或demo开发,放入对应SO文件。
167: 服务端定位失败,请您检查是否禁用获取位置信息权限,尝试重新请求定位。
502: AK参数错误,请按照说明文档重新申请AK。
505:AK不存在或者非法,请按照说明文档重新申请AK。
601: AK服务被开发者自己禁用,请按照说明文档重新申请AK。
602: key mcode不匹配,您的AK配置过程中安全码设置有问题,请确保:SHA1正确,“;”分号是英文状态;且包名是您当前运行应用的包名,请按照说明文档重新申请AK。
501~700:AK验证失败,请按照说明文档重新申请AK。
如果不能定位,请记住这个返回值,并到百度LBS开放平台论坛Andriod定位SDK版块中进行交流,网址:http://bbs.lbsyun.baidu.com/forum.php?mod=forumdisplay&fid=10 。若返回值是162~167,请将错误码、IMEI和定位时间反馈至邮箱loc-bugs@baidu.com,以便我们跟进追查问题。
- 第四步,开始定位
开启:
mLocationClient.start();
start:启动定位SDK。 stop:关闭定位SDK。调用start之后只需要等待定位结果自动回调即可。
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop函数即可。
如果stop之后仍然想进行定位,可以再次start等待定位结果回调即可。
如果开发者想按照自己逻辑请求定位,可以在start之后按照自己的逻辑请求locationclient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。
参考链接:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/getloc
- 定位信息的使用
在 BDLocationListener 的 onReceiveLocation(BDLocation location) 回调中 location有定位信息。
定位信息可以在百度地图上标识点,也可以输出经纬度等文本信息。
- 百度SDK定位功能
- 使用百度地图sdk实现定位功能
- Android应用程序实现定位功能(使用百度定位SDK)
- 百度地图SDK V3.2 和百度定位SDK V4.2 完成定位功能
- Android使用百度地图SDK实现定位功能
- Android使用百度地图SDK实现定位功能
- 百度定位SDK无法定位
- 百度定位SDK
- 百度SDK定位
- android 百度SDK定位
- 百度定位SDK使用
- 百度SDK地图定位
- 百度SDK定位
- 百度定位SDK使用
- 定位 -- 百度地图SDK
- 百度定位sdk接入
- 百度定位sdk使用
- 定位功能iOS SDK
- RDD的持久化
- 既使用maven编译,又使用lib下的Jar包
- Android7.0中文文档(API)-- AbsoluteLayout.LayoutParams
- SQL 关于错误的日期转换时间戳 , 会出现什么情况
- Deep Learning的推荐学习资源
- 百度SDK定位功能
- Windows应用程序-文本显示
- 利用css画横线或竖线
- 欢迎使用CSDN-markdown编辑器
- 网络直播电视之M3U8解析篇
- ++、--操作符使用分析
- 泛型
- idea下findbugs 安装配置
- 使用valgrind检查内存问题