android定位sdk | 百度地图api sdk-凯发k8官方旗舰厅

浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。
地理围栏
下载开发文档
简介

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

具体步骤如下:

1. 第一步,准备工作

在使用定位sdk进行具体开发工作之前,需, 并对开发工程进行环境配置工作。详细介绍请参考项目创建部分的说明。 此外, 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 gnss获取的坐标
mgeofenceclient.addgeofence("一点点","餐饮",centerpoint,geofenceclient.bd09ll,1000f,10,"业务id");

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

//创建一个中心点坐标
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 gnss获取的坐标
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 voidongeofencecreatefinished(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 voidonreceive(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()

上一篇

智能定位vdr

下一篇

防定位作弊

本篇文章对您是否有帮助?

网站地图