以下内容自定位 SDK V3.2.0 版本后支持。

第一步,创建地理围栏

地理围栏没有最大个数限制,您可以无限制的创建围栏。但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率。定位 SDK 提供根据高德POI、行政区划,自定义圆形、多边形四种方式创建地理围栏。

1、创建地理围栏对象

这里还包括设置一些基本参数:

//实例化地理围栏客户端

GeoFenceClient mGeoFenceClient = new GeoFenceClient(getApplicationContext());

//设置希望侦测的围栏触发行为,默认只侦测用户进入围栏的行为

//public static final int GEOFENCE_IN 进入地理围栏

//public static final int GEOFENCE_OUT 退出地理围栏

//public static final int GEOFENCE_STAYED 停留在地理围栏内10分钟

mGeoFenceClient.setActivateAction(GEOFENCE_IN|GEOFENCE_OUT|GEOFENCE_STAYED);

2、创建高德POI地理围栏

提供两个创建高德POI围栏的接口,一个是根据关键字创建POI围栏,另一个是根据经纬度进行周边搜索创建POI围栏。

根据关键字创建围栏

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

mGeoFenceClient.addGeoFence(String keyword, String poiType, String city, int size,String customId);

参数说明

参数说明示例

keywordPOI关键字例如:首开广场

poiTypePOI类型例如:写字楼

cityPOI所在的城市名称例如:北京

customId与围栏关联的自有业务Id

示例代码

mGeoFenceClient.addGeoFence("首开广场","写字楼","北京",1,"000FATE23(考勤打卡)");

根据周边POI创建围栏

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

mGeoFenceClient.addGeoFence(String keyword, String poiType, DPoint point, float aroundRadius, int size,String customId);

参数说明

参数说明示例

keywordPOI关键字例如:首开广场

poiTypePOI类型例如:写字楼

point周边区域中心点的经纬度,以此中心点建立周边地理围栏例如:北京

aroundRadius周边半径,0-50000米,默认3000米

customId与围栏关联的自有业务Id

示例代码

//创建一个中心点坐标

DPoint centerPoint = new DPoint();

//设置中心点纬度

centerPoint.setLatitude(39.123D);

//设置中心点经度

centerPoint.setLongitude(116.123D);

//执行添加围栏的操作

mGeoFenceClient.addGeoFence("肯德基","餐饮",centerPoint,1000F,10,"自有ID");

3、创建行政区划围栏

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

根据关键字创建围栏

mGeoFenceClient.addGeoFence(String keyword, String customId);

参数说明

参数说明示例

keyword行政区划关键字例如:朝阳区

customId与围栏关联的自有业务Id

示例代码

mGeoFenceClient.addGeoFence("海淀区","00FDTW103(在北京海淀的化妆品促销活动)");

4、创建自定义围栏

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

圆形围栏

圆形围栏需要提供中心点,以及半径。

mGeoFenceClient.addGeoFence(Point point,float radius, String customId);

参数说明

参数说明示例

point围栏中心点

radius要创建的围栏半径 ,半径无限制,单位米

customId与围栏关联的自有业务Id

示例代码

/创建一个中心点坐标

DPoint centerPoint = new DPoint();

//设置中心点纬度

centerPoint.setLatitude(39.123D);

//设置中心点经度

centerPoint.setLongitude(116.123D);

mGeoFenceClient.addGeoFence (centerPoint,500F,"自有业务Id");

多边形围栏

mGeoFenceClient.addGeoFence(List points, String customId);

参数说明

参数说明示例

points多边形的边界坐标点,最少传3个

customId与围栏关联的自有业务Id

示例代码

List points = new ArrayList();

points.add(new DPoint(39.992702, 116.470470));

points.add(new DPoint(39.994387, 116.472498));

points.add(new DPoint(39.994478, 116.474161));

points.add(new DPoint(39.993163, 116.474504));

points.add(new DPoint(39.991363, 116.472605));

mGeoFenceClient.addGeoFence(points,"自有业务ID");

第二步,开始定位

当围栏创建完毕,且围栏创建成功时会启动定位,这部分无需您来设置,SDK内部执行。

启动的定位机制:通过“远离围栏时的超低频定位策略”来降低电量消耗,“离近围栏会逐渐提高定位频率”,保证有足够的定位精度来完成围栏位置检测。

需要注意,如果您希望程序在后台持续检测围栏触发行为,您务必要在应用本地服务中启动 GeoFenceClient,且确保这个本地服务一直存活。

下面介绍如何知道创建围栏是成功还是失败。

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

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

//创建回调监听

GeoFenceListener fenceListenter = new GeoFenceListener() {

@Override

public void onGeoFenceCreateFinished(List geoFenceList,

int errorCode) {

if(errorCode == GeoFence.ADDGEOFENCE_SUCCESS){//判断围栏是否创建成功

tvReult.setText("添加围栏成功!!");

//geoFenceList是已经添加的围栏列表,可据此查看创建的围栏

} else {

tvReult.setText("添加围栏失败!!");

}

}

};

mGeoFenceClient.setGeoFenceListener(fenceListenter);//设置回调监听

第四步,接收围栏触发行为广播

用户与围栏位置发生变化的行为称为围栏触发行为,围栏触发行为也是用户进入围栏、退出围栏、在围栏内停留这三种行为的统称,行为的触发是通过Android 的广播进行发送的。

围栏触发行为的广播内容是可选性的,在第一步“创建地理围栏对象”中讲到可以应用 setActiveAction(int[] actions) 方法设置希望侦测到的围栏触发行为。

当定位启动后会马上得到符合希望的所有围栏的状态检测广播,这些广播会告诉上层逻辑每个围栏和当前用户位置的初始状态究竟是IN(定位点在围栏里)还是OUT(定位点在围栏外),这种广播不是围栏触发行为广播,是每个围栏的初始状态广播,不会经常收到,在有新的围栏被创建,或者希望侦测的Action改变时会收到。接下来的每次广播都是围栏触发行为广播(当然,触发前提是位置和围栏的关系发生了改变)。

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、解析广播内容

当上一步完成之后,可以在第2步创建的监听器中在 onReceive 方法中对广播内容进行解析。广播内容是通过 Bundle 进行传递的。

//获取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);

最后,清除所有围栏

当不再需要使用围栏时,可以调用以下代码对已经设定的围栏进行清除操作。

//会清除所有围栏

mGeoFenceClient.removeGeoFence();

设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...相关推荐

  1. 设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...

    以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...

  2. vue使用高德地图画电子围栏_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...

    以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...

  3. php 开发高德地图地理围栏,地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...

    以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...

  4. 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  5. ios 高德获取定位_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API

    iOS定位SDK提供的单次定位方法基于苹果定位核心,苹果定位核心会在设备移动时连续返回定位结果,高德在此基础上封装了单次定位.当设备可以正常联网时,还可以返回该定位点的对应的中国境内位置信息(包括:省 ...

  6. android高德地图上加自定义菜单,自定义UI控件-UI界面定制-开发指南-Android 导航SDK | 高德地图API...

    关于自定义 UI 布局,您还可以参考官方Demo--完全自定义UI导航. 单元素自定义 可以通过AMapNaviViewOptions中如下接口进行单UI元素显示隐藏,只列出部分接口,更多功能请参考A ...

  7. android 地图导航开发思路,基础功能-导航组件-开发指南-Android 导航SDK | 高德地图API...

    预置条件 请在您工程的 AndroidManifest.xml 中配置声明导航组件 Activity: android:name="com.amap.api.navi.AmapRouteAc ...

  8. android 双导航组件,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

  9. android双导航功能,高级功能-导航组件-开发指南-Android 导航SDK | 高德地图API

    导航组件的配置类 AmapNaviParams中提供了很多配置方法,支持在启动同时传入,满足自定义需求. 启动相关配置 如果已经在外部通过AMapNavi计算过一条路线,可以选择启动组件不进行重新算路 ...

最新文章

  1. Python遍历字典的方法
  2. nginx反向代理和rewrite进行解决跨域问题、去掉url中的一部分字符串,通过nginx正则生成新的url...
  3. Composer -- PHP依赖管理的用法
  4. VB讲课笔记07:控制结构
  5. 笔记本html外接显示器,笔记本如何外接显示器
  6. 当 Windows 11 宕机时:从蓝屏死机变成“黑屏死机”!
  7. JAVA 文件下载乱码问题解决办法
  8. c++的准备知识18
  9. 荔枝直播助手无法连接到服务器,荔枝FM直播助手pc客户端
  10. 计算机英语 st,1st、2nd、3rd、…10th都是什么的缩写?怎么读?10th之...-1st-英语-司俜辰同学...
  11. 云端软件平台 封装了诺基亚PC套件无法找到驱动怎么办
  12. 【金曲榜】————1、《修炼爱情》(林俊杰)
  13. 1020 月饼 (25分) 冒泡排序
  14. word文档最上面有一条不是页眉的线
  15. 计算机蓝屏代码0xc0000020,Win10运行程序提示“损坏的映像 错误0xc0000020”解决方法图文教程...
  16. kotlin和java相互转换的实操
  17. devexpress gridview代码设置
  18. 量子前沿英雄谱|Marin Soljačić(马林·索尔季奇)
  19. Unity 插件免费分享——需要自取——更新于2022.9.7
  20. 标准化与归一化的差异

热门文章

  1. SAP ABAP RFC table administration
  2. SAP CRM WebClient UI how to disable excel export
  3. 如何测试 SAP OData的filter功能
  4. 今日头条上传图片时设置封面图报像素低的原因是什么
  5. SAP CRM系统到底有多少种订单类型
  6. 推荐一个免费的屏幕取色器,鼠标放到的位置自动显示RGB
  7. wireshark 抓包iphone 4g_比4G下续航短2小时,苹果回应iPhone12用5G耗电快:与运营商一道做更多优化工作...
  8. finalshell一直弹出输入密码_Linux 密码忘了怎么办?明明输入的密码是对的为啥一直过不去?...
  9. postgis启动_PostgreSQL的安装和启动方法大全
  10. python mssql 报表_Python从mssql向SQLite插入表