全部服务产品
开发者频道
服务升级
登录

文档全面上新

更科技的视觉体验,更高效的页面结构,快前往体验吧!

体验新版
Android定位SDK
更新时间:2022年02月24日 
服务简介

百度地图Android定位SDK是为Android移动端应用提供的一套简单易用的定位服务接口,专注于为广大开发者提供最好的综合定位服务。通过使用百度定位SDK,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。
该服务目前支持获取海外的经纬度信息。

重要:为了进一步加强对最终用户个人信息的安全保护措施,从定位SDK v9.2.9版本起,请开发者务必确保调用SDK任何接口前先调用隐私合规接口setAgreePrivacy,否则可能会无法正常使用相关功能。具体可参考隐私合规接口说明。

免费说明

目前百度地图Android定位SDK境内服务对非商业目的使用的开发者不收取任何费用,开发者可自行下载放心使用。
如您以商业目的(包括但不限于对第三方用户收费、项目投标,以及其他直接或间接获取收益或利益)使用本平台服务,则用户须要事先获得本平台"商用授权"许可。 平台商用授权的授权对象为公司主体。授权成功后,您将会收到平台提供的书面版商用授权书(附带百度公司签章)。
商用授权可点击这里了解详情。

功能介绍
  • 基础定位
    简介
    定位SDK的核心能力就是帮助开发者快速、精准的获取用户定位。开发者只需按照如下流程操作,即可获取用户当前经纬度。
    功能展示
    copy.png
    /**
    * 初始化定位参数配置
    */
    
    private void initLocationOption() {
    //定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
    LocationClient locationClient = new LocationClient(getApplicationContext());
    //声明LocationClient类实例并配置定位参数
    LocationClientOption locationOption = new LocationClientOption();
    MyLocationListener myLocationListener = new MyLocationListener();
    //注册监听函数
    locationClient.registerLocationListener(myLocationListener); 
    //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
    locationOption.setLocationMode(LocationMode.Hight_Accuracy); 
    //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
    locationOption.setCoorType("gcj02");
    //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
    locationOption.setScanSpan(1000);
    //可选,设置是否需要地址信息,默认不需要
    locationOption.setIsNeedAddress(true);
    //可选,设置是否需要地址描述
    locationOption.setIsNeedLocationDescribe(true);
    //可选,设置是否需要设备方向结果
    locationOption.setNeedDeviceDirect(false);
    //可选,默认false,设置是否当卫星定位有效时按照1S1次频率输出卫星定位结果
    locationOption.setLocationNotify(true);
    //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
    locationOption.setIgnoreKillProcess(true); 
    //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
    locationOption.setIsNeedLocationDescribe(true);
    //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
    locationOption.setIsNeedLocationPoiList(true);
    //可选,默认false,设置是否收集CRASH信息,默认收集
    locationOption.SetIgnoreCacheException(false); 
    //可选,默认false,设置是否开启卫星定位
    locationOption.setOpenGnss(true); 
    //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
    locationOption.setIsNeedAltitude(false);
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
    locationOption.setOpenAutoNotifyMode();
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
    locationOption.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT); 
    //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
    locationClient.setLocOption(locationOption);
    //开始定位
    locationClient.start();
    }
    /**
    * 实现定位回调
    */
    public class MyLocationListener extends BDAbstractLocationListener{
    @Override
    public void onReceiveLocation(BDLocation location){
      //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
      //以下只列举部分获取经纬度相关(常用)的结果信息
      //更多结果信息获取说明,请参照类参考中BDLocation类中的说明
    
      //获取纬度信息
      double latitude = location.getLatitude();
      //获取经度信息
      double longitude = location.getLongitude();
      //获取定位精度,默认值为0.0f
      float radius = location.getRadius();
      //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
      String coorType = location.getCoorType();
      //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
      int errorCode = location.getLocType();
     
    }
    }
    
    
    http://mapopen-pub-androidsdk.cdn.bcebos.com/location/video/loctionvideo.mp4
  • 连续定位
    简介
    实际定位场景中,可能会存在很多的位置抖动,此示例展示了一种对定位结果进行的平滑优化处理实际测试下,该平滑策略在市区步行场景下,有明显平滑效果,有效减少了部分抖动,开放算法逻辑(具体算法在官网示例demo的LocationFilter类中查找),希望能够对开发者提供帮助。
    功能展示
    copy.png
    /**
    * 初始化定位参数配置
    */
    
    private void initLocationOption() {
    //定位服务的客户端。宿主程序在客户端声明此类,并调用,目前只支持在主线程中启动
    LocationClient locationClient = new LocationClient(getApplicationContext());
    //声明LocationClient类实例并配置定位参数
    LocationClientOption locationOption = new LocationClientOption();
    MyLocationListener myLocationListener = new MyLocationListener();
    //注册监听函数
    locationClient.registerLocationListener(myLocationListener); 
    //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
    locationOption.setLocationMode(LocationMode.Hight_Accuracy); 
    //可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
    locationOption.setCoorType("gcj02");
    //可选,默认0,即仅定位一次,设置发起连续定位请求的间隔需要大于等于1000ms才是有效的
    locationOption.setScanSpan(1000);
    //可选,设置是否需要地址信息,默认不需要
    locationOption.setIsNeedAddress(true);
    //可选,设置是否需要地址描述
    locationOption.setIsNeedLocationDescribe(true);
    //可选,设置是否需要设备方向结果
    locationOption.setNeedDeviceDirect(false);
    //可选,默认false,设置是否当Gnss有效时按照1S1次频率输出Gnss结果
    locationOption.setLocationNotify(true);
    //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
    locationOption.setIgnoreKillProcess(true); 
    //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
    locationOption.setIsNeedLocationDescribe(true);
    //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
    locationOption.setIsNeedLocationPoiList(true);
    //可选,默认false,设置是否收集CRASH信息,默认收集
    locationOption.SetIgnoreCacheException(false); 
    //可选,默认false,设置是否开启卫星定位
    locationOption.setOpenGnss(true); 
    //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
    locationOption.setIsNeedAltitude(false);
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
    locationOption.setOpenAutoNotifyMode();
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
    locationOption.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT); 
    //需将配置好的LocationClientOption对象,通过setLocOption方法传递给LocationClient对象使用
    locationClient.setLocOption(locationOption);
    //开始定位
    locationClient.start();
    }
    /**
    * 实现定位回调
    */
    public class MyLocationListener extends BDAbstractLocationListener{
    @Override
    public void onReceiveLocation(BDLocation location){
      //此处的BDLocation为定位结果信息类,通过它的各种get方法可获取定位相关的全部结果
      //以下只列举部分获取经纬度相关(常用)的结果信息
      //更多结果信息获取说明,请参照类参考中BDLocation类中的说明
    
      //获取纬度信息
      double latitude = location.getLatitude();
      //获取经度信息
      double longitude = location.getLongitude();
      //获取定位精度,默认值为0.0f
      float radius = location.getRadius();
      //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
      String coorType = location.getCoorType();
      //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
      int errorCode = location.getLocType();
     
    }
    }
    
    
               
    http://mapopen-pub-androidsdk.cdn.bcebos.com/location/video/locationFilter.mp4
  • 后台定位
    简介
    为了最大程度的增加定位进程的存活率,百度Android定位SDK提供后台持续定位的能力,可在应用退后台的状态下,持续记录位置信息。具体请参考Android8.0定位须知中的介绍。
    功能展示
    copy.png
    //核心实现代码如下,详细代码请参考官网Demo。
    //开启前台定位服务:
    Notification.Builder builder = new Notification.Builder (MainActivity.this.getApplicationContext());
    //获取一个Notification构造器
    
    Intent nfIntent = new Intent(MainActivity.this.getApplicationContext(), MainActivity.class);
    builder.setContentIntent(PendingIntent.getActivity(MainActivity.this, 0, nfIntent, 0)) // 设置PendingIntent
    .setContentTitle("正在进行后台定位") // 设置下拉列表里的标题
    .setSmallIcon(R.mipmap.ic_launcher) // 设置状态栏内的小图标
    .setContentText("后台定位通知") // 设置上下文内容
    .setAutoCancel(true)
    .setWhen(System.currentTimeMillis()); // 设置该通知发生的时间
    Notification notification = null;
    notification = builder.build();
    notification.defaults = Notification.DEFAULT_SOUND; //设置为默认的声音
    mLocClient.enableLocInForeground(1001, notification);// 调起前台定位
    //停止前台定位服务:
    mLocClient.disableLocInForeground(true);// 关闭前台定位,同时移除通知栏
    
               
    http://mapopen-pub-androidsdk.cdn.bcebos.com/location/video/serviceLocation.mp4
  • 位置提醒
    简介
    定位SDK支持位置提醒功能,当用户到达开发者设定的位置区域时,会触发相应提示。
    功能展示
    copy.png
    
    public LocationClient mLocationClient = null;
    public BDNotifyListener myListener = new MyNotifyListener();
    /**
    *请在主线程中声明LocationClient类对象,该对象初始化需传入Context类型参数。推荐使用getApplicationConext()方法获取全进程有效的Context。
    */
    public void onCreate() {
    //声明LocationClient类
    mLocationClient = new LocationClient(getApplicationContext());     
    //注册监听函数
    mLocationClient.registerNotify(myListener);    
    }
    /**
    *定义MyNotifyLister类,继承BDNotifyListener,实现位置监听的回调。
    */
    public class MyNotifyLister extends BDNotifyListener {
    public void onNotify(BDLocation mlocation, float distance){
      //已到达设置监听位置附近
    }   		
    }
    //调用BDNotifyListener的setNotifyLocation方法,实现设置位置消息提醒。
    //设置位置提醒,四个参数分别是:纬度、精度、半径、坐标类型
    myListener.setNotifyLocation(40.0f, 116.0f, 3000, mLocationClient.getLocOption().getCoorType());
    //启动定位,SDK便会自动开启位置消息提醒的监听
    mLocationClient.start();
    //调用BDNotifyListener的removeNotifyEvent方法,实现取消位置监听
    mLocationClient.removeNotifyEvent(myListener);
               
    http://mapopen-pub-androidsdk.cdn.bcebos.com/location/video/ remind.mp4
服务优势

百度地图Android定位SDK是为Android移动端应用提供的一套简单易用的定位服务接口,专注于为广大开发者提供最好的综合定位服务。通过使用百度定位SDK,开发者可以轻松为应用程序实现智能、精准、高效的定位功能。

-定位成功率:整体定位成功率高达99.6%。

-定位精度高:卫星定位精度达到10米,Wi-Fi定位精度达24米,基站定位精度达107米。

-流量小:单次请求产生的网络流量在0.3K,不请求定位时不会产生任何流量。

-速度快:网络定位速度达到200ms(网络正常环境下),IP定位速度小于200ms。

-覆盖广:移动、联通、电信全网络覆盖,基站覆盖率达到99%,Wi-Fi覆盖率达到99%。

-服务稳定:定位服务稳定性可达到99.999%。

-低功耗:内存占用15.6M,CPU占用率2.2%。

-室内定位:覆盖火车站、机场、商场、客运汽车站、博物馆、综合医院、图书馆等多种场景,利用三角定位技术、增强Wi-Fi指纹模型技术、地磁技术、蓝牙技术等,提供精度可达1-3m的室内精准定位服务。
注:如百度未覆盖您的室内地图数据、室内店铺等信息变更第一时间更新定位信息,或其他室内图室内定位相关需求,您可以联系我们

-海外定位: 百度目前覆盖全球200多个国家和地区,支持全球52种语言,拥有海外地区POI总量超过1亿、路网7000万公里。


loc-adv2.png

应用场景

-智能硬件: 以智能可穿戴、智能家居、智能交通设备和VR设备为代表,解决用户定位难题,助力开发者实现用户精准定位、远程定位、地理围栏监控提醒等功能。

pic1.png


-电商购物: 基于用户的精确位置,为用户推荐商品,为用户自动填写收货地址,优化送货体验,通过精准定位实时查看运输位置。

pic2.png


-出行服务: 为开发者提供出行用车服务,利用精准定位和位置描述,明确用车起点、终点,帮助司机更好的找到用车用户。

pic3.png


-影音娱乐: 利用精准定位服务,获取用户位置,为用户推荐基于LBS的相关内容,推荐周边其他用户,增强用户社交属性,助力开发者为用户进行精准化营销推送。

pic4.png


-社交通讯: 百度为基于位置的社交应用提供附近的人、位置分享、个性化推荐,根据好友位置计算距离、路线规划等位置服务。

pic5.png

  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

如发现文档错误,或对此文档有更好的建议,请在下方反馈。问题咨询请前往反馈平台提交工单咨询。

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消