地理围栏API服务开发
地理围栏API服务开发
要使用华为地理围栏服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中。
指定应用权限
• 如果需要使用地理围栏服务API,需要在“AndroidManifest.xml”文件中申请ACCESS_FINE_LOCATION权限和ACCESS_COARSE_LOCATION权限:
a.
b.
• 在Android Q版本中,需要在“AndroidManifest.xml”文件中申请ACCESS_BACKGROUND_LOCATION权限:
.
说明
以上地理围栏相关权限属于危险权限,使用时需要动态申请。
注册静态广播
地理围栏触发信息通过广播接收,需要在Manifest文件中注册广播接收器。
- <receiver
android:name=".geofence.GeoFenceBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.huawei.hmssample.geofence.GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION" />
</intent-filter>
创建地理围栏服务客户端
在Activity的OnCreate()方法中创建GeofenceService实例,并使用该实例调用与geofence相关的API接口。
- private GeofenceService geofenceService;
- private ArrayList idList;
- private ArrayList geofenceList;
- private String TAG;
- private PendingIntent pendingIntent;
- protected void onCreate(Bundle savedInstanceState) {
// 创建一个新的GeofenceService实例
geofenceService = LocationServices.getGeofenceService(this);
// 获取PendingIntent对象
pendingIntent = getPendingIntent();
idList = new ArrayList<String>();
geofenceList = new ArrayList<Geofence>();
TAG = "geoFence";
- }
创建并添加地理围栏
可以先创建地理围栏实例,并构建添加地理围栏的请求。在发送请求之后,会通过Task通知是否添加成功。 - 创建地理围栏实例。
- geofenceList.add(new Geofence.Builder()
.setUniqueId("mGeofence")
.setValidContinueTime(10000)
// 传入经纬度信息,圆形地理围栏半径(单位:米)
.setRoundArea(latitude, longitude, radius)
// 进入或退出围栏时触发回调
.setConversions(Geofence.ENTER_GEOFENCE_CONVERSION | Geofence.EXIT_GEOFENCE_CONVERSION)
.build());
- idList.add(“mGeofence”);
- 创建添加地理围栏的请求。
- private GeofenceRequest getAddGeofenceRequest() {
GeofenceRequest.Builder builder = new GeofenceRequest.Builder();
// 当用户在围栏中时,添加围栏后立即触发回调
builder.setInitConversions(GeofenceRequest.ENTER_INIT_CONVERSION);
builder.createGeofenceList(geofenceList);
return builder.build();
- }
- 动态注册GeoFenceBroadcastReceiver广播接收器。
- // 通过PendingIntent动态注册GeoFenceBroadcastReceiver广播接收器,当触发围栏的时候,会通过广播通知。
- private PendingIntent getPendingIntent() {
Intent intent = new Intent(this, GeoFenceBroadcastReceiver.class);
intent.setAction(GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION);
return PendingIntent.getBroadcast(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- }
- 发送添加地理围栏请求。
- public void requestGeoFenceWithNewIntent() {
// 通过传入PendingIntent的方式添加地理围栏,并处理地理围栏添加行为的响应数据
geofenceService.createGeofenceList(getAddGeofenceRequest(), pendingIntent)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()) {
Log.i(TAG, "add geofence success!");
} else {
Log.w(TAG, "add geofence failed : " + task.getException().getMessage());
}
}
});
- }
- 移除地理围栏。除了通过id移除地理围栏,还可以通过PendingIntent进行移除。
- public void removeWithID() {
// 通过id移除地理围栏,并处理地理围栏移除行为的响应数据
geofenceService.deleteGeofenceList(idList)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()) {
Log.i(TAG, "delete geofence with ID success!");
} else {
Log.w(TAG, "delete geofence with ID failed ");
}
}
});
- }
- 地理围栏触发信息处理。
当检测到用户触发围栏事件时,会通过PendingIntent发送广播通知用户。 - // 地理围栏服务广播接收器
- public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
public static final String ACTION_PROCESS_LOCATION = "com.huawei.hmssample.geofence.GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION";
@Override
public void onReceive(Context context, Intent intent) {
if (intent != null) {
final String action = intent.getAction();
StringBuilder sb = new StringBuilder();
String next = "\n";
if (ACTION_PROCESS_LOCATION.equals(action)) {
// 从intent中解析出GeofenceData对象
GeofenceData geofenceData = GeofenceData.getDataFromIntent(intent);
if (geofenceData != null) {
// 获取错误码
int errorCode = geofenceData.getErrorCode();
// 获取地理围栏触发类型
int conversion = geofenceData.getConversion();
// 获取触发的地理围栏信息
List<Geofence> list = geofenceData.getConvertingGeofenceList();
// 获取触发时的位置信息
Location mLocation = geofenceData.getConvertingLocation();
// 是否是正常触发围栏事件,返回false时表示出现错误
boolean status = geofenceData.isSuccess();
sb.append("errorcode: " + errorCode + next);
sb.append("conversion: " + conversion + next);
for (int i = 0; i < list.size(); i++){
sb.append("geoFence id :" + list.get(i).getUniqueId() + next);
}
sb.append("location is :" + mLocation.getLongitude() + " " + mLocation.getLatitude() + next);
sb.append("is successful :" + status);
Log.i(TAG,sb.toString());
}
}
}
}
- }
地理围栏API服务开发相关推荐
- 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API
产品介绍 地理围栏服务是一类HTTP接口,提供在服务端,增删改查地理围栏的功能,同时支持对于设备与围栏关系进行监控. 适用场景 地理围栏服务适用于需要针对特定区域,监控用户位置与区域关系的场景中.包括 ...
- 活动识别API服务开发
活动识别API服务开发 要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 • 在Android Q ...
- Hyperledger Fabric Rest API服务开发教程【含源码】
Hyperledger Fabric Rest API服务开发教程[含源码] Hyperledger Fabric 提供了软件开发包/SDK以帮助开发者访问fabric网络 和部署在网络上的链码,但是 ...
- 设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...
以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...
- php 开发高德地图地理围栏,地理围栏-辅助功能-开发指南-Android 定位SDK | 高德地图API...
以下内容自定位 SDK V3.2.0 版本后支持. 第一步,创建地理围栏 地理围栏没有最大个数限制,您可以无限制的创建围栏.但请您根据业务需求合理的创建围栏,控制围栏个数可以有效的保证程序执行效率.定 ...
- vue使用高德地图画电子围栏_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...
以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...
- 设置电子围栏 高德地图_地理围栏-辅助功能-开发指南-iOS 定位SDK | 高德地图API...
以下内容自 iOS 定位SDK V2.3.0 后支持. 第 1 步,引入头文件 在调用地理围栏功能的类中引入AMapFoundationKit.h和AMapLocationKit.h这两个头文件,注意 ...
- 基于Android的谷歌地图地理围栏功能开发
第一步.Android使用谷歌地图权限 Android上使用谷歌地图 必备条件:翻墙.Android设备上安装Google Play Service 由于谷歌在国内已经被墙了,所以我们只能使用翻墙软件 ...
- 基于uni-app与百度地图API实现简易前后端分离的地理围栏应用
一.引言 地理围栏(Geo-fencing)是LBS 的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机进入.离开某个特定地理区域,或在该区域内活动时,后台可以感知到这一变化,同时手机可以 ...
最新文章
- Linux命令 swap:内存交换空间
- 【转】android中如何查看某个线程的logcat--不错
- php弹出消息翻页,一个很不错的PHP翻页类
- 【百战GAN】二次元宅们,给自己做一个专属动漫头像可好!
- 如何在 Entity Framework 中计算 时间差 ?
- android多个水波球,android球形水波百分比控件代码
- 数据库-windows上安装mysql
- linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
- Boxes in a Line UVA - 12657 (双向链表)
- java二进制命令_Java二进制指令代码解析
- 3D MAX导出插件编写
- Wordpress网站渗透测试(进阶详细思路)
- RocksDB源码学习-四-读-三
- 1_绪论 分布式机器学习
- js 点击按钮或者图片,实现图片上传以及将图片显示在页面上
- 诺基亚Q4净利润5.64亿美元 同比增54%
- 如何成为一名合格的程序员?
- 亵渎小说介绍_亵渎行不通
- python 参加某图像去噪比赛有感
- php 实现倒计时-将秒数转换为时间(天、小时、分、秒)
热门文章
- 2022-2028年中国滑雪产业投资分析及前景预测报告(全卷)
- 2022-2028年中国冶金工业节能减排投资分析及前景预测报告
- Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
- 在linux(centos7)下本地仓库的搭建
- 理解GloVe模型(Global vectors for word representation)
- Linux BSP非标准HDMI分辨率
- 利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力
- 自监督学习(Self-Supervised Learning)多篇论文解读(下)
- 深度学习11个实用技巧
- Android setOnItemClickListener cannot be used with a spinner