| (未显示1个用户的19个中间版本) | |||
| 第1行: | 第1行: | ||
<div class="bluetitle"><div class="services-title-text">简介</div></div> | <div class="bluetitle"><div class="services-title-text">简介</div></div> | ||
| − | + | 定位SDK的核心能力就是帮助开发者快速、精准的获取用户定位信息。开发者只需按照如下流程操作,即可获取用户当前经纬度。 | |
<div class="devguide"> | <div class="devguide"> | ||
| − | <div class="leftborderbg" style="height: | + | <div class="leftborderbg" style="min-height:1515px;"></div> |
<div class="devguideorder"><span>1</span>第一步,准备工作</div> | <div class="devguideorder"><span>1</span>第一步,准备工作</div> | ||
| − | <div class="devguidecenter"> | + | <div class="devguidecenter">在使用定位SDK进行具体开发工作之前,需[http://lbsyun.baidu.com/apiconsole/key?application=key 获取密钥(AK)],并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 |
此外,Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前,请详细了解关于Android 6.0系统开发须知。</div> | 此外,Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前,请详细了解关于Android 6.0系统开发须知。</div> | ||
| 第15行: | 第15行: | ||
private MyLocationListener myListener = new MyLocationListener(); | private MyLocationListener myListener = new MyLocationListener(); | ||
//BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口 | //BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口 | ||
| − | // | + | //原有BDLocationListener接口暂时同步保留。具体介绍请参考后文第四步的说明 |
public void onCreate() { | public void onCreate() { | ||
mLocationClient = new LocationClient(getApplicationContext()); | mLocationClient = new LocationClient(getApplicationContext()); | ||
| 第28行: | 第28行: | ||
定位SDK所提供的定位模式包括三种:高精度、低功耗和仅用设备定位。开发者请根据自己的实际使用需求进行选择。 | 定位SDK所提供的定位模式包括三种:高精度、低功耗和仅用设备定位。开发者请根据自己的实际使用需求进行选择。 | ||
| − | + | 定位SDK能够返回三种坐标类型的经纬度(国内),分别是GCJ02(国测局坐标)、BD09(百度墨卡托坐标)和BD09ll(百度经纬度坐标)。如果开发者想利用定位SDK获得的经纬度直接在百度地图上标注,请选择坐标类型BD09ll。 | |
| − | + | <span style="color:#F39700;">定位SDK自V6.2.3版本起,全新升级了全球定位能力,在海外地区定位所获得的经纬度,坐标类型默认、且只能是WGS84类型。</span> | |
利用LocationClientOption类配置定位SDK参数。核心代码及注释说明如下: | 利用LocationClientOption类配置定位SDK参数。核心代码及注释说明如下: | ||
| 第41行: | 第41行: | ||
//LocationMode. Battery_Saving:低功耗; | //LocationMode. Battery_Saving:低功耗; | ||
//LocationMode. Device_Sensors:仅使用设备; | //LocationMode. Device_Sensors:仅使用设备; | ||
| + | //LocationMode.Fuzzy_Locating, 模糊定位模式;v9.2.8版本开始支持,可以降低API的调用频率,但同时也会降低定位精度; | ||
option.setCoorType("bd09ll"); | 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); | option.setScanSpan(1000); | ||
| 第54行: | 第61行: | ||
//如果设置非0,需设置1000ms以上才有效 | //如果设置非0,需设置1000ms以上才有效 | ||
| − | option. | + | option.setOpenGnss(true); |
| − | // | + | //可选,设置是否使用卫星定位,默认false |
//使用高精度和仅用设备两种定位模式的,参数必须设置为true | //使用高精度和仅用设备两种定位模式的,参数必须设置为true | ||
option.setLocationNotify(true); | option.setLocationNotify(true); | ||
| − | // | + | //可选,设置是否当卫星定位有效时按照1S/1次频率输出卫星定位结果,默认false |
option.setIgnoreKillProcess(false); | option.setIgnoreKillProcess(false); | ||
| 第65行: | 第72行: | ||
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true) | //设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true) | ||
| − | option. | + | option.SetIgnoreCacheException(false); |
//可选,设置是否收集Crash信息,默认收集,即参数为false | //可选,设置是否收集Crash信息,默认收集,即参数为false | ||
| − | option. | + | option.setWifiCacheTimeOut(5*60*1000); |
| − | // | + | //可选,V7.2版本新增能力 |
| − | // | + | //如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位 |
| − | option. | + | option.setEnableSimulateGnss(false); |
| − | // | + | //可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为false |
| + | |||
| + | option.setNeedNewVersionRgc(true); | ||
| + | //可选,设置是否需要最新版本的地址信息。默认需要,即参数为true | ||
mLocationClient.setLocOption(option); | mLocationClient.setLocOption(option); | ||
| 第81行: | 第91行: | ||
</pre></div> | </pre></div> | ||
<div class="devguideorder"><span>4</span>第四步,实现BDAbstractLocationListener接口</div> | <div class="devguideorder"><span>4</span>第四步,实现BDAbstractLocationListener接口</div> | ||
| − | <div class="devguidecenter"> | + | <div class="devguidecenter">Android定位SDK自V7.2版本起,对外提供了Abstract类型的监听接口BDAbstractLocationListener,用于实现定位监听。原有BDLocationListener暂时保留,推荐开发者升级到Abstract类型的新监听接口使用,该接口会异步获取定位结果,核心代码如下: |
<pre class="prettyprint codestyle"> | <pre class="prettyprint codestyle"> | ||
| − | public class MyLocationListener | + | public class MyLocationListener extends BDAbstractLocationListener{ |
@Override | @Override | ||
public void onReceiveLocation(BDLocation location){ | public void onReceiveLocation(BDLocation location){ | ||
| 第91行: | 第101行: | ||
double latitude = location.getLatitude(); //获取纬度信息 | double latitude = location.getLatitude(); //获取纬度信息 | ||
| − | double longitude = location. | + | double longitude = location.getLongitude(); //获取经度信息 |
float radius = location.getRadius(); //获取定位精度,默认值为0.0f | float radius = location.getRadius(); //获取定位精度,默认值为0.0f | ||
| 第110行: | 第120行: | ||
</pre> | </pre> | ||
| − | start() | + | start():启动定位SDK;stop():关闭定位SDK。调用start()之后只需要等待定位结果自动回调即可。 |
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop()函数即可。 | 开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop()函数即可。 | ||
| 第116行: | 第126行: | ||
如果stop()之后仍然想进行定位,可以再次start()等待定位结果回调即可。 | 如果stop()之后仍然想进行定位,可以再次start()等待定位结果回调即可。 | ||
| − | + | 自V7.2版本起,新增LocationClient.reStart()方法,用于在某些特定的异常环境下重启定位。 | |
如果开发者想按照自己逻辑请求定位,可以在start()之后按照自己的逻辑请求LocationClient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。 | 如果开发者想按照自己逻辑请求定位,可以在start()之后按照自己的逻辑请求LocationClient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。 | ||
</div></div> | </div></div> | ||
2023年1月5日 (四) 17:44的最后版本
定位SDK的核心能力就是帮助开发者快速、精准的获取用户定位信息。开发者只需按照如下流程操作,即可获取用户当前经纬度。
核心代码段如下:
public LocationClient mLocationClient = null;
private MyLocationListener myListener = new MyLocationListener();
//BDAbstractLocationListener为7.2版本新增的Abstract类型的监听接口
//原有BDLocationListener接口暂时同步保留。具体介绍请参考后文第四步的说明
public void onCreate() {
mLocationClient = new LocationClient(getApplicationContext());
//声明LocationClient类
mLocationClient.registerLocationListener(myListener);
//注册监听函数
}
定位SDK所提供的定位模式包括三种:高精度、低功耗和仅用设备定位。开发者请根据自己的实际使用需求进行选择。
定位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
//使用高精度和仅用设备两种定位模式的,参数必须设置为true
option.setLocationNotify(true);
//可选,设置是否当卫星定位有效时按照1S/1次频率输出卫星定位结果,默认false
option.setIgnoreKillProcess(false);
//可选,定位SDK内部是一个service,并放到了独立进程。
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
option.SetIgnoreCacheException(false);
//可选,设置是否收集Crash信息,默认收集,即参数为false
option.setWifiCacheTimeOut(5*60*1000);
//可选,V7.2版本新增能力
//如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位
option.setEnableSimulateGnss(false);
//可选,设置是否需要过滤卫星定位仿真结果,默认需要,即参数为false
option.setNeedNewVersionRgc(true);
//可选,设置是否需要最新版本的地址信息。默认需要,即参数为true
mLocationClient.setLocOption(option);
//mLocationClient为第二步初始化过的LocationClient对象
//需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
//更多LocationClientOption的配置,请参照类参考中LocationClientOption类的详细说明
public class MyLocationListener extends BDAbstractLocationListener{
@Override
public void onReceiveLocation(BDLocation location){
//此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
//以下只列举部分获取经纬度相关(常用)的结果信息
//更多结果信息获取说明,请参照类参考中BDLocation类中的说明
double latitude = location.getLatitude(); //获取纬度信息
double longitude = location.getLongitude(); //获取经度信息
float radius = location.getRadius(); //获取定位精度,默认值为0.0f
String coorType = location.getCoorType();
//获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
int errorCode = location.getLocType();
//获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
}
}
mLocationClient.start(); //mLocationClient为第二步初始化过的LocationClient对象 //调用LocationClient的start()方法,便可发起定位请求
start():启动定位SDK;stop():关闭定位SDK。调用start()之后只需要等待定位结果自动回调即可。
开发者定位场景如果是单次定位的场景,在收到定位结果之后直接调用stop()函数即可。
如果stop()之后仍然想进行定位,可以再次start()等待定位结果回调即可。
自V7.2版本起,新增LocationClient.reStart()方法,用于在某些特定的异常环境下重启定位。
如果开发者想按照自己逻辑请求定位,可以在start()之后按照自己的逻辑请求LocationClient.requestLocation()函数,会主动触发定位SDK内部定位逻辑,等待定位回调即可。
没有match的答案?试试对话大模型




