浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
地理围栏
更新时间:2020年07月08日
简介

定位SDK支持百度POI、自定义圆形、多边形、行政区划多种方式地理围栏,您可以根据自己的业务场景需求合理创建围栏,地理围栏没有最大个数限制。 当目标进入或走出围栏时,即可使用地理围栏功能进行提醒。

多方式地理围栏功能自定位SDK V8.2.0及以后版本开始支持。

具体步骤如下:

1第一步,准备工作
在使用定位SDK进行具体开发工作之前,需 获取密钥(AK),并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外,Google在Android 6.0中引入了动态权限获取机制,开发者在使用定位SDK之前,请详细了解关于Android 6.0系统开发须知。
2第二步,创建地理围栏对象

核心代码段如下:

//实例化地理围栏客户端
GeoFenceClient mGeoFenceClient = new GeoFenceClient(getApplicationContext());

//设置希望侦测的围栏触发行为,默认只侦测用户进入围栏的行为
//public static final int GEOFENCE_IN 进入地理围栏
//public static final int GEOFENCE_OUT 退出地理围栏
//public static final int GEOFENCE_STAYED 在地理围栏内停留
//public static final int GEOFENCE_IN_OUT 进入、退出地理围栏
//public static final int GEOFENCE_IN_STAYED 进入地理围栏、在地理围栏内停留
//public static final int GEOFENCE_OUT_STAYED 退出地理围栏、在地理围栏内停留
//public static final int GEOFENCE_IN_OUT_STAYED 进入、退出、停留
mGeoFenceClient.setActivateAction(GEOFENCE_IN_OUT_STAYED);

/** 
* setTriggerCount(int in, int out, int stay)
* 设置进入围栏、离开围栏、在围栏内停留三种侦听行为的触发次数
* @param in 进入围栏的触发次数,类型为int,必须是>=0
* @param out 离开围栏的触发次数,类型为int,必须是>=0
* @param stay 在围栏内停留的触发次数,类型为int,必须是>=0
*/
mGeoFenceClient.setTriggerCount(3,3,2);

/**
* setStayTime(int interval)
* 当设置了在围栏内停留的侦听行为,可以通过这个方法设置停留时长,单位秒,默认停留时长为10分钟
* @param interval,单位秒
*/
mGeoFenceClient.setStayTime(180);

1. 创建百度POI地理围栏


可以根据百度POI来创建地理围栏,百度目前提供两种方式来创建围栏,关键字地理围栏和周边POI地理围栏。


1.1根据关键字创建围栏

通过以下方法执行POI关键字搜索并创建百度POI地理围栏

mGeoFenceClient.addGeoFence(final String keyword, String poiType,final String city, int size,String customId);
// keyword:POI关键字,例如百度大厦
// poiType:POI类型,例如办公楼
// city:POI所在城市,例如北京
// customID:与围栏关联的自有业务ID,例如"001KWTS83(考勤打卡)"

示例代码

mGeoFenceClient.addGeoFence("百度大厦","办公楼","北京",1," 0001");


1.2 根据周边POI创建围栏

通过以下方法执行POI周边搜索并创建百度POI地理围栏。

mGeoFenceClient.addGeoFence(final String keyword, String poiType, DPoint point, String coorType, float aroundRadius, int size, final String customId);
//keyword:POI关键字,例如一点点
//poiType:POI类型,例如餐饮
//point:周边区域中心点经纬度,例如北京
//coorType:周边区域中心点坐标系类型,例如BD09LL
//aroundRadius:周边半径,例如10
//size:围栏个数
//customID:业务ID

示例代码

//创建一个中心点坐标
DPoint centerPoint = new DPoint();
//设置中心点纬度
centerPoint.setLatitude(40.051D);
//设置中心点经度
centerPoint.setLongitude(116.300D);
//执行添加围栏的操作

//设置中心点坐标系类型
//public static final String BD09LL 百度经纬度坐标
//public static final String BD09MC 百度墨卡托米制坐标
//public static final String GCJ02 国测局坐标系
//public static final String WGS84 GPS获取的坐标

mGeoFenceClient.addGeoFence("一点点","餐饮",centerPoint,GeoFenceClient.BD09LL,1000F,10,"业务ID");

2. 创建圆形围栏

圆形围栏一次接口调用只可以创建一个围栏,创建多个自定义围栏需要多次调用创建接口。

mGeoFenceClient.addGeoFence(Point point, String coorType, float radius, String customId);
//coorType:中心点坐标系类型,例如BD09LL
//radius:围栏半径,例如100

示例代码

//创建一个中心点坐标
DPoint centerPoint = new DPoint();
//设置中心点纬度
centerPoint.setLatitude(40.051D);
//设置中心点经度
centerPoint.setLongitude(116.300D);

//设置中心点坐标系类型
//public static final String BD09LL 百度经纬度坐标
//public static final String BD09MC  百度墨卡托米制坐标
//public static final String GCJ02 国测局坐标系
//public static final String WGS84 GPS获取的坐标

mGeoFenceClient.addGeoFence (centerPoint,GeoFenceClient.BD09LL,100,"业务ID");

3. 创建多边形围栏 多边形围栏一次接口调用只可以创建一个围栏,创建多个自定义围栏需要多次调用创建接口。

mGeoFenceClient.addGeoFence(List<DPoint> points,String coorType, String customId);
//points:多边形边界坐标,至少传如三个
//coorType:坐标系类型

4. 创建行政区划围栏

可根据行政区划关键字创建行政区划围栏

mGeoFenceClient.addGeoFence(String keyword, String customId);

示例代码

mGeoFenceClient.addGeoFence("海淀区","业务ID");


3第三步,开始定位

定位SDK 会在围栏创建成功后,自动启动定位,无需开发者进行设置。 在应用本地服务中启动 GeoFenceClient后,才能确保程序在后台也能持续监听围栏。

4第四步,接收围栏创建后的回调

围栏创建完毕的信息会通过 GeoFenceListener 进行回调。可以在回调中知道创建围栏成功与否,以及查看所创建围栏的具体内容。 示例代码

//创建回调监听
GeoFenceListener fenceListenter = new GeoFenceListener() {
    
    @Override
    public void onGeoFenceCreateFinished(List<GeoFence> geoFenceList,
            int errorCode) {
        if(errorCode == GeoFence.ADDGEOFENCE_SUCCESS){//判断围栏是否创建成功
            tvReult.setText("添加围栏成功!!");
            //geoFenceList是已经添加的围栏列表,可据此查看创建的围栏
        } else {
            tvReult.setText("添加围栏失败!!");
        }
    }
};
mGeoFenceClient.setGeoFenceListener(fenceListenter);//设置回调监听

5第五步,接收围栏触发提醒

用户进入围栏、退出围栏、在围栏内停留均为围栏触发提醒。您可以选择合适的时机进行围栏的相应提醒

1. 创建并设置PendingIntent

//定义接收的action字符串
public static final String GEOFENCE_BROADCAST_ACTION = "com.location.apis.geofencedemo.broadcast";
//创建并设置PendingIntent
mGeoFenceClient.createPendingIntent(GEOFENCE_BROADCAST_ACTION);

2.创建监听

private BroadcastReceiver mGeoFenceReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(GEOFENCE_BROADCAST_ACTION)) {
        }
    }
};

3.注册

IntentFilter filter = new IntentFilter(
                ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(GEOFENCE_BROADCAST_ACTION);
        registerReceiver(mGeoFenceReceiver, filter);

4.解析内容

//获取Bundle
Bundle bundle = intent.getExtras();
//获取围栏行为:
int status = bundle.getInt(GeoFence.BUNDLE_KEY_FENCESTATUS);
//获取自定义的围栏标识:
String customId = bundle.getString(GeoFence.BUNDLE_KEY_CUSTOMID);
//获取围栏ID:
String fenceId = bundle.getString(GeoFence.BUNDLE_KEY_FENCEID);
//获取当前有触发的围栏对象:
GeoFence fence = bundle.getParcelable(GeoFence.BUNDLE_KEY_FENCE);

6第六步,清除围栏
//清除所有围栏
mGeoFenceClient.removeGeoFence();
  • 文档根本没法用

  • 文档水平很差

  • 文档水平一般

  • 文档不错

  • 文档写的很好

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

提交反馈

拖动标注工具

添加矩形标注

添加箭头标注

完成

取消