所有文档
开发指南
定位sdk的核心能力就是帮助开发者快速、精准的获取用户定位信息。开发者只需按照如下流程操作,即可获取用户当前经纬度。
在使用定位sdk进行具体开发工作之前,需, 并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外,google在android 6.0中引入了动态权限获取机制,开发者在使用定位sdk之前, 请详细了解关于android 6.0系统开发须知。
请在主线程中声明locationclient类对象,该对象初始化需传入context类型参数。 推荐使用getapplicationconext()方法获取全进程有效的context。
核心代码段如下:
option.setlocationmode(locationmode.hight_accuracy);//可选,设置定位模式,默认高精度//locationmode.hight_accuracy:高精度;//locationmode. battery_saving:低功耗;//locationmode. device_sensors:仅使用设备;//locationmode.fuzzy_locating, 模糊定位模式;v9.2.8版本开始支持,可以降低api的调用频率,但同时也会降低定位精度;option.setcoortype("bd09ll");//可选,设置返回经纬度坐标类型,默认gcj02//gcj02:国测局坐标;//bd09ll:百度经纬度坐标;//bd09:百度墨卡托坐标;//海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标option.setfirstloctype(firstloctypefirstloctype)//可选,首次定位时可以选择定位的返回是准确性优先还是速度优先,默认为速度优先//可以搭配setoncelocation(boolean isoncelocation)单次定位接口使用,当设置为单次定位时,setfirstloctype接口中设置的类型即为单次定位使用的类型//firstloctype.speed_in_first_loc:速度优先,首次定位时会降低定位准确性,提升定位速度;//firstloctype.accuaracy_in_first_loc:准确性优先,首次定位时会降低速度,提升定位准确性;option.setscanspan(1000);//可选,设置发起定位请求的间隔,int类型,单位ms//如果设置为0,则代表单次定位,即仅定位一次,默认为0//如果设置非0,需设置1000ms以上才有效option.setopengnss(true);//可选,设置是否使用卫星定位,默认false//使用高精度和仅用设备两种定位模式的,参数必须设置为trueoption.setlocationnotify(true);//可选,设置是否当卫星定位有效时按照1s/1次频率输出卫星定位结果,默认falseoption.setignorekillprocess(false);//可选,定位sdk内部是一个service,并放到了独立进程。//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setignorekillprocess(true)option.setignorecacheexception(false);//可选,设置是否收集crash信息,默认收集,即参数为falseoption.setwificachetimeout(5*60*1000);//可选,v7.2版本新增能力//如果设置了该接口,首次启动定位时,会先判断当前wi-fi是否超出有效期,若超出有效期,会先重新扫描wi-fi,然后定位option.setenablesimulategnss(false);//可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为falseoption.setneednewversionrgc(true);//可选,设置是否需要最新版本的地址信息。默认需要,即参数为truemlocationclient.setlocoption(option);//mlocationclient为第二步初始化过的locationclient对象//需将配置好的locationclientoption对象,通过setlocoption方法传递给locationclient对象使用//更多locationclientoption的配置,请参照类参考中locationclientoption类的详细说明
通过参数配置,可选择定位模式、可设定返回经纬度坐标类型、可设定是单次定位还是连续定位。
定位sdk所提供的模式分为四种:高精度定位模式、低功耗定位模式、仅设备定位模式、模糊定位模式 ;
高精度定位模式:这种定位模式下,会同时使用网络定位和gnss定位,优先返回最高精度的定位结果;
低功耗定位模式:这种定位模式下,不会使用gnss,只会使用网络定位(wi-fi和基站定位)
仅用设备定位模式:这种定位模式下,不需要连接网络,只使用gnss进行定位,这种模式下不支持室内环境的定位
模糊定位模式:这种定位模式下,不会获取gnss与wi-fi信息,只会使用基站信息进行定位
开发者请根据自己的实际使用需求进行选择。
定位sdk能够返回三种坐标类型的经纬度(国内),分别是gcj02(国测局坐标)、bd09(百度墨卡托坐标)和bd09ll(百度经纬度坐标)。 如果开发者想利用定位sdk获得的经纬度直接在百度地图上标注,请选择坐标类型bd09ll。
定位sdk自v6.2.3版本起,全新升级了全球定位能力,在海外地区定位所获得的经纬度,坐标类型默认、且只能是wgs84类型。
利用locationclientoption类配置定位sdk参数。核心代码及注释说明如下:
locationclientoption option = new locationclientoption();option.setlocationmode(locationmode.hight_accuracy);//可选,设置定位模式,默认高精度//locationmode.hight_accuracy:高精度;//locationmode. battery_saving:低功耗;//locationmode. device_sensors:仅使用设备;//locationmode.fuzzy_locating, 模糊定位模式;v9.2.8版本开始支持,可以降低api的调用频率,但同时也会降低定位精度;option.setcoortype("bd09ll");//可选,设置返回经纬度坐标类型,默认gcj02//gcj02:国测局坐标;//bd09ll:百度经纬度坐标;//bd09:百度墨卡托坐标;//海外地区定位,无需设置坐标类型,统一返回wgs84类型坐标option.setfirstloctype(firstloctypefirstloctype)//可选,首次定位时可以选择定位的返回是准确性优先还是速度优先,默认为速度优先//可以搭配setoncelocation(boolean isoncelocation)单次定位接口使用,当设置为单次定位时,setfirstloctype接口中设置的类型即为单次定位使用的类型//firstloctype.speed_in_first_loc:速度优先,首次定位时会降低定位准确性,提升定位速度;//firstloctype.accuaracy_in_first_loc:准确性优先,首次定位时会降低速度,提升定位准确性;option.setscanspan(1000);//可选,设置发起定位请求的间隔,int类型,单位ms//如果设置为0,则代表单次定位,即仅定位一次,默认为0//如果设置非0,需设置1000ms以上才有效option.setopengnss(true);//可选,设置是否使用卫星定位,默认false//使用高精度和仅用设备两种定位模式的,参数必须设置为trueoption.setlocationnotify(true);//可选,设置是否当卫星定位有效时按照1s/1次频率输出卫星定位结果,默认falseoption.setignorekillprocess(false);//可选,定位sdk内部是一个service,并放到了独立进程。//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setignorekillprocess(true)option.setignorecacheexception(false);//可选,设置是否收集crash信息,默认收集,即参数为falseoption.setwificachetimeout(5*60*1000);//可选,v7.2版本新增能力//如果设置了该接口,首次启动定位时,会先判断当前wi-fi是否超出有效期,若超出有效期,会先重新扫描wi-fi,然后定位option.setenablesimulategnss(false);//可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为falseoption.setneednewversionrgc(true);//可选,设置是否需要最新版本的地址信息。默认需要,即参数为truemlocationclient.setlocoption(option);//mlocationclient为第二步初始化过的locationclient对象//需将配置好的locationclientoption对象,通过setlocoption方法传递给locationclient对象使用//更多locationclientoption的配置,请参照类参考中locationclientoption类的详细说明
android定位sdk自v7.2版本起,对外提供了abstract类型的监听接口bdabstractlocationlistener, 用于实现定位监听。原有bdlocationlistener暂时保留,推荐开发者升级到abstract类型的新监听接口使用, 该接口会异步获取定位结果,核心代码如下:
public class mylocationlistener extends bdabstractlocationlistener{@overridepublic voidonreceivelocation(bdlocation location){//此处的bdlocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果//以下只列举部分获取经纬度相关(常用)的结果信息//更多结果信息获取说明,请参照类参考中bdlocation类中的说明double latitude = location.getlatitude();//获取纬度信息double longitude = location.getlongitude();//获取经度信息float radius = location.getradius();//获取定位精度,默认值为0.0fstring coortype = location.getcoortype();//获取经纬度坐标类型,以locationclientoption中设置过的坐标类型为准int errorcode = location.getloctype();//获取定位类型、定位错误返回码,具体信息可参照类参考中bdlocation类中的说明}}
最后,只需发起定位,便能够从bdabstractlocationlistener监听接口中获取定位结果信息。核心代码如下:
mlocationclient.start();//mlocationclient为第二步初始化过的locationclient对象//调用locationclient的start()方法,便可发起定位请求
start():启动定位sdk;stop():关闭定位sdk。调用start()之后只需要等待定位结果自动回调即可。
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop()函数即可。
如果stop()之后仍然想进行定位,可以再次start()等待定位结果回调即可。
自v7.2版本起,新增locationclient.restart()方法,用于在某些特定的异常环境下重启定位。
如果开发者想按照自己逻辑请求定位,可以在start()之后按照自己的逻辑请求locationclient.requestlocation()函数,会主动触发定位sdk内部定位逻辑,等待定位回调即可。
上一篇
下一篇
本篇文章对您是否有帮助?