浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 定位SDK

开发者在自己的Android移动应用中集成定位SDK,可轻松实现获取当前位置信息的功能。获取当前位置信息,即我们常说的定位。其中位置信息主要包括经纬度、地址、位置描述、周边POI等

产品简介

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

  • 基础定位
    简介
    定位SDK的核心能力就是帮助开发者快速、精准的获取用户位置信息。开发者只需按照如下流程操作,即可获取用户当前经纬度。
    功能展示
    /**
     * 初始化定位参数配置
     */
    
    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,设置是否当gps有效时按照1S1次频率输出GPS结果
    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,设置是否开启Gps定位
    locationOption.setOpenGps(true); 
    //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
    locationOption.setIsNeedAltitude(false);
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
    locationOption.setOpenAutoNotifyMode();
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
    locationOption.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT); 
    //开始定位
    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类中查找),希望能够对开发者提供帮助。
    功能展示
    /**
     * 初始化定位参数配置
     */
    
    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,设置是否当gps有效时按照1S1次频率输出GPS结果
    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,设置是否开启Gps定位
    locationOption.setOpenGps(true); 
    //可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
    locationOption.setIsNeedAltitude(false);
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者,该模式下开发者无需再关心定位间隔是多少,定位SDK本身发现位置变化就会及时回调给开发者
    locationOption.setOpenAutoNotifyMode();
    //设置打开自动回调位置模式,该开关打开后,期间只要定位SDK检测到位置变化就会主动回调给开发者
    locationOption.setOpenAutoNotifyMode(3000,1, LocationClientOption.LOC_SENSITIVITY_HIGHT); 
    //开始定位
    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定位须知中的介绍。
    功能展示
    //核心实现代码如下,详细代码请参考官网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支持位置提醒功能,当用户到达开发者设定的位置区域时,会触发相应提示。
    功能展示
    
    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提供的所有服务是免费的,您需申请密钥(key)后,才可使用百度地图Android SDK。任何非营利性产品请直接使用,商业目的产品使用前请参考使用须知。在您使用百度地图Android SDK之前,请先阅读百度地图API使用条款

开始使用