地理围栏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文件中注册广播接收器。

  1. <receiver
  2.  android:name=".geofence.GeoFenceBroadcastReceiver"
    
  3.  android:exported="true">
    
  4.  <intent-filter>
    
  5.      <action android:name="com.huawei.hmssample.geofence.GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION" />
    
  6.  </intent-filter>
    

创建地理围栏服务客户端
在Activity的OnCreate()方法中创建GeofenceService实例,并使用该实例调用与geofence相关的API接口。

  1. private GeofenceService geofenceService;
  2. private ArrayList idList;
  3. private ArrayList geofenceList;
  4. private String TAG;
  5. private PendingIntent pendingIntent;
  6. protected void onCreate(Bundle savedInstanceState) {
  7.  // 创建一个新的GeofenceService实例
    
  8.  geofenceService = LocationServices.getGeofenceService(this);
    
  9.  // 获取PendingIntent对象
    
  10. pendingIntent = getPendingIntent();
    
  11. idList = new ArrayList<String>();
    
  12. geofenceList = new ArrayList<Geofence>();
    
  13. TAG = "geoFence";
    
  14. }
    创建并添加地理围栏
    可以先创建地理围栏实例,并构建添加地理围栏的请求。在发送请求之后,会通过Task通知是否添加成功。
  15. 创建地理围栏实例。
  16. geofenceList.add(new Geofence.Builder()
  17.      .setUniqueId("mGeofence")
    
  18.      .setValidContinueTime(10000)
    
  19.      // 传入经纬度信息,圆形地理围栏半径(单位:米)
    
  20.      .setRoundArea(latitude, longitude, radius)
    
  21.      // 进入或退出围栏时触发回调
    
  22.      .setConversions(Geofence.ENTER_GEOFENCE_CONVERSION | Geofence.EXIT_GEOFENCE_CONVERSION)
    
  23.      .build());
    
  24. idList.add(“mGeofence”);
  25. 创建添加地理围栏的请求。
  26. private GeofenceRequest getAddGeofenceRequest() {
  27.  GeofenceRequest.Builder builder = new GeofenceRequest.Builder();
    
  28.  // 当用户在围栏中时,添加围栏后立即触发回调
    
  29.  builder.setInitConversions(GeofenceRequest.ENTER_INIT_CONVERSION);
    
  30.  builder.createGeofenceList(geofenceList);
    
  31.  return builder.build();
    
  32. }
  33. 动态注册GeoFenceBroadcastReceiver广播接收器。
  34. // 通过PendingIntent动态注册GeoFenceBroadcastReceiver广播接收器,当触发围栏的时候,会通过广播通知。
  35. private PendingIntent getPendingIntent() {
  36.  Intent intent = new Intent(this, GeoFenceBroadcastReceiver.class);
    
  37.  intent.setAction(GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION);
    
  38.  return PendingIntent.getBroadcast(this,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
  39. }
  40. 发送添加地理围栏请求。
  41. public void requestGeoFenceWithNewIntent() {
  42.  // 通过传入PendingIntent的方式添加地理围栏,并处理地理围栏添加行为的响应数据
    
  43.  geofenceService.createGeofenceList(getAddGeofenceRequest(), pendingIntent)
    
  44.      .addOnCompleteListener(new OnCompleteListener<Void>() {
    
  45.          @Override
    
  46.          public void onComplete(Task<Void> task) {
    
  47.              if (task.isSuccessful()) {
    
  48.                  Log.i(TAG, "add geofence success!");
    
  49.              } else {
    
  50.                 Log.w(TAG, "add geofence failed : " + task.getException().getMessage());
    
  51.             }
    
  52.         }
    
  53.     });
    
  54. }
  55. 移除地理围栏。除了通过id移除地理围栏,还可以通过PendingIntent进行移除。
  56. public void removeWithID() {
  57.  // 通过id移除地理围栏,并处理地理围栏移除行为的响应数据
    
  58.  geofenceService.deleteGeofenceList(idList)
    
  59.      .addOnCompleteListener(new OnCompleteListener<Void>() {
    
  60.          @Override
    
  61.          public void onComplete(Task<Void> task) {
    
  62.              if (task.isSuccessful()) {
    
  63.                  Log.i(TAG, "delete geofence with ID success!");
    
  64.              } else {
    
  65.                 Log.w(TAG, "delete geofence with ID failed ");
    
  66.             }
    
  67.         }
    
  68.     });
    
  69. }
  70. 地理围栏触发信息处理。
    当检测到用户触发围栏事件时,会通过PendingIntent发送广播通知用户。
  71. // 地理围栏服务广播接收器
  72. public class GeoFenceBroadcastReceiver extends BroadcastReceiver {
  73.  public static final String ACTION_PROCESS_LOCATION = "com.huawei.hmssample.geofence.GeoFenceBroadcastReceiver.ACTION_PROCESS_LOCATION";
    
  74.  @Override
    
  75.  public void onReceive(Context context, Intent intent) {
    
  76.      if (intent != null) {
    
  77.          final String action = intent.getAction();
    
  78.          StringBuilder sb = new StringBuilder();
    
  79.          String next = "\n";
    
  80.         if (ACTION_PROCESS_LOCATION.equals(action)) {
    
  81.             // 从intent中解析出GeofenceData对象
    
  82.             GeofenceData geofenceData = GeofenceData.getDataFromIntent(intent);
    
  83.             if (geofenceData != null) {
    
  84.                // 获取错误码
    
  85.                int errorCode = geofenceData.getErrorCode();
    
  86.                // 获取地理围栏触发类型
    
  87.                int conversion = geofenceData.getConversion();
    
  88.                // 获取触发的地理围栏信息
    
  89.                List<Geofence> list = geofenceData.getConvertingGeofenceList();
    
  90.                // 获取触发时的位置信息
    
  91.                Location mLocation = geofenceData.getConvertingLocation();
    
  92.                // 是否是正常触发围栏事件,返回false时表示出现错误
    
  93.                boolean status = geofenceData.isSuccess();
    
  94.                sb.append("errorcode: " + errorCode + next);
    
  95.                sb.append("conversion: " + conversion + next);
    
  96.                for (int i = 0; i < list.size(); i++){
    
  97.                    sb.append("geoFence id :" + list.get(i).getUniqueId() + next);
    
  98.                }
    
  99.                sb.append("location is :" + mLocation.getLongitude() + " " + mLocation.getLatitude() + next);
    
  100.                sb.append("is successful :" + status);
    
  101.                Log.i(TAG,sb.toString());
    
  102.             }
    
  103.         }
    
  104.     }
    
  105. }
    
  106. }

地理围栏API服务开发相关推荐

  1. 设置电子围栏 高德地图_地理围栏-API文档-开发指南-Web服务 API | 高德地图API

    产品介绍 地理围栏服务是一类HTTP接口,提供在服务端,增删改查地理围栏的功能,同时支持对于设备与围栏关系进行监控. 适用场景 地理围栏服务适用于需要针对特定区域,监控用户位置与区域关系的场景中.包括 ...

  2. 活动识别API服务开发

    活动识别API服务开发 要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 • 在Android Q ...

  3. Hyperledger Fabric Rest API服务开发教程【含源码】

    Hyperledger Fabric Rest API服务开发教程[含源码] Hyperledger Fabric 提供了软件开发包/SDK以帮助开发者访问fabric网络 和部署在网络上的链码,但是 ...

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

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

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

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

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

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

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

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

  8. 基于Android的谷歌地图地理围栏功能开发

    第一步.Android使用谷歌地图权限 Android上使用谷歌地图 必备条件:翻墙.Android设备上安装Google Play Service 由于谷歌在国内已经被墙了,所以我们只能使用翻墙软件 ...

  9. 基于uni-app与百度地图API实现简易前后端分离的地理围栏应用

    一.引言 地理围栏(Geo-fencing)是LBS 的一种新应用,就是用一个虚拟的栅栏围出一个虚拟地理边界.当手机进入.离开某个特定地理区域,或在该区域内活动时,后台可以感知到这一变化,同时手机可以 ...

最新文章

  1. Linux命令 swap:内存交换空间
  2. 【转】android中如何查看某个线程的logcat--不错
  3. php弹出消息翻页,一个很不错的PHP翻页类
  4. 【百战GAN】二次元宅们,给自己做一个专属动漫头像可好!
  5. 如何在 Entity Framework 中计算 时间差 ?
  6. android多个水波球,android球形水波百分比控件代码
  7. 数据库-windows上安装mysql
  8. linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
  9. Boxes in a Line UVA - 12657 (双向链表)
  10. java二进制命令_Java二进制指令代码解析
  11. 3D MAX导出插件编写
  12. Wordpress网站渗透测试(进阶详细思路)
  13. RocksDB源码学习-四-读-三
  14. 1_绪论 分布式机器学习
  15. js 点击按钮或者图片,实现图片上传以及将图片显示在页面上
  16. 诺基亚Q4净利润5.64亿美元 同比增54%
  17. 如何成为一名合格的程序员?
  18. 亵渎小说介绍_亵渎行不通
  19. python 参加某图像去噪比赛有感
  20. php 实现倒计时-将秒数转换为时间(天、小时、分、秒)

热门文章

  1. 2022-2028年中国滑雪产业投资分析及前景预测报告(全卷)
  2. 2022-2028年中国冶金工业节能减排投资分析及前景预测报告
  3. Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
  4. 在linux(centos7)下本地仓库的搭建
  5. 理解GloVe模型(Global vectors for word representation)
  6. Linux BSP非标准HDMI分辨率
  7. 利用UltraScale和UltraScale+FPGA和MPSOC加速DSP设计生产力
  8. 自监督学习(Self-Supervised Learning)多篇论文解读(下)
  9. 深度学习11个实用技巧
  10. Android setOnItemClickListener cannot be used with a spinner