活动识别API服务开发

要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中。

指定应用权限

  • 在Android Q以下版本使用活动识别需要在“AndroidManifest.xml”文件中配置以下权限:
  1. <uses-permission android:name="com.huawei.hms.permission.ACTIVITY_RECOGNITION"/>
  • 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申请以下权限:

.          <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

说明

以上活动识别相关权限属于危险权限,使用时需要动态申请。

注册静态广播

示例代码中活动识别服务的活动状态更新信息需要广播接收,因此需要在“AndroidManifest.xml”文件中注册广播接收器。

  1. <!--注册活动识别服务广播接收器-->
  2. <receiver
  3. android:name=".location.fusedlocation.LocationBroadcastReceiver"
  4. android:exported="true">
  5. <intent-filter>
  6. <action android:name="com.huawei.hmssample.location.LocationBroadcastReceiver.ACTION_PROCESS_LOCATION" />
  7. </intent-filter>
  8. </receiver>

创建活动识别服务客户端

在Activity的OnCreate()方法中创建一个ActivityIdentificationService实例,通过该实例调用活动识别相关接口:

  1. private PendingIntent pendingIntent;
  2. private ActivityIdentificationService activityIdentificationService;
  3. protected void onCreate(Bundle savedInstanceState) {
  4. // 通过ActivityIdentification.getService()创建activityIdentificationService实例
  5. activityIdentificationService = ActivityIdentification.getService(this);
  6. // 获取PendingIntent对象
  7. pendingIntent = getPendingIntent();
  8. }

活动识别更新

使用活动识别服务,首先需要注册活动识别更新,可以检测用户当前是步行、骑自行车、静止等状态。

  1. 新建PendingIntent。
  2. // 获取自定义静态广播类LocationBroadcastReceiver关联的PendingIntent
  3. private PendingIntent getPendingIntent() {
  4. Intent intent = new Intent(this, LocationBroadcastReceiver.class);
  5. intent.setAction(LocationBroadcastReceiver.ACTION_PROCESS_LOCATION);
  6. return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
  7. }
  8. 监听活动识别更新请求。

通过调用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一个参数为活动检测更新间隔(单位为毫秒),第二个参数pendingIntent。

  1. // 创建活动识别请求
  2. activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
  3. // 请求成功监听回调
  4. .addOnSuccessListener(new OnSuccessListener<Void>() {
  5. @Override
  6. public void onSuccess(Void aVoid) {
  7. Log.i(TAG, "createActivityIdentificationUpdates onSuccess");
  8. }
  9. })
  10. 10.     // 请求失败监听回调
  11. 11.     .addOnFailureListener(new OnFailureListener() {
  12. 12.         @Override
  13. 13.         public void onFailure(Exception e) {
  14. 14.             Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage());
  15. 15.         }
  16. 16.     });
  17. 移除活动识别更新。

在使用完活动识别后需要进行移除操作。调用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活动识别定时监听,参数PendingIntent必须与createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)参数里的PendingIntent是同一个。

  1. // 移除活动识别更新
  2. activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
  3. // 移除回调成功监听回调
  4. .addOnSuccessListener(new OnSuccessListener<Void>() {
  5. @Override
  6. public void onSuccess(Void aVoid) {
  7. Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess");
  8. }
  9. })
  10. 10.     // 移除回调失败监听回调
  11. 11.     .addOnFailureListener(new OnFailureListener() {
  12. 12.         @Override
  13. 13.         public void onFailure(Exception e) {
  14. 14.             Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage());
  15. 15.         }
  16. 16.     });
  17. 活动识别结果获取。

通过广播接收到的intent中获取活动识别结果。

  1. // 活动识别广播接收者
  2. public class LocationBroadcastReceiver extends BroadcastReceiver {
  3. // 活动识别服务广播action
  4. public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
  5. @Override
  6. public void onReceive(Context context, Intent intent) {
  7. if (intent != null) {
  8. final String action = intent.getAction();
  9. 10.             if (ACTION_PROCESS_LOCATION.equals(action)) {
  10. 11.                  // 从活动识别服务发送的intent的extras中获取ActivityIdentificationResponse
  11. 12.                  ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent);
  12. 13.                  List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas();
  13. 14.             }
  14. 15.         }
  15. 16.     }

17. }

活动过渡更新

接口提供检测活动过渡条件(进入、退出)的功能,例如需要检测用户从走路变为骑自行车的状态时,应用通过调用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法获取活动过渡的状态变化。

  1. 设置监听活动过渡请求参数。
  2. // 创建一个静止状态进入活动转换信息对象
  3. ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
  4. // 创建一个静止状态退出活动转换信息对象
  5. ActivityConversionInfo activityConversionInfoStillExit = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION);
  6. List<ActivityConversionInfo> activityConversionInfos = new ArrayList<>();
  7. activityConversionInfos.add(activityConversionInfoStillEnter);
  8. activityConversionInfos.add(activityConversionInfoStillExit);
  9. // 创建一个活动转换请求体实例
  10. ActivityConversionRequest request = new ActivityConversionRequest();

10. request.setActivityConversions(activityConversionInfos);

  1. 监听活动过渡更新。
  2. // 监听活动识别状态转换
  3. Task<Void> task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
  4. // 任务成功监听回调
  5. task.addOnSuccessListener(new OnSuccessListener<Void>() {
  6. @Override
  7. public void onSuccess(Void aVoid) {
  8. Log.i(TAG, "createActivityConversionUpdates onSuccess");
  9. }
  10. })
  11. 10.     // 任务失败监听回调
  12. 11.     .addOnFailureListener(new OnFailureListener() {
  13. 12.         @Override
  14. 13.         public void onFailure(Exception e) {
  15. 14.             Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage());
  16. 15.         }
  17. 16.     });
  18. (可选)移除活动过渡更新。

不需要监听活动过渡条件时,需要调用deleteActivityConversionUpdates(PendingIntent pendingIntent)进行移除操作。

  1. // 通过指定pendingIntent移除活动转换更新
  2. activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
  3. // 移除更新成功监听回调
  4. .addOnSuccessListener(new OnSuccessListener<Void>() {
  5. @Override
  6. public void onSuccess(Void aVoid) {
  7. Log.i(TAG, "deleteActivityConversionUpdates onSuccess");
  8. }
  9. })
  10. 10.     // 移除更新失败监听回调
  11. 11.     .addOnFailureListener(new OnFailureListener() {
  12. 12.         @Override
  13. 13.         public void onFailure(Exception e) {
  14. 14.             Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage());
  15. 15.         }
  16. 16.     });
  17. 返回结果获取。

活动过渡的结果:

  1. public class LocationBroadcastReceiver extends BroadcastReceiver {
  2. public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
  3. @Override
  4. public void onReceive(Context context, Intent intent) {
  5. if (intent != null) {
  6. final String action = intent.getAction();
  7. if (ACTION_PROCESS_LOCATION.equals(action)) {
  8. // 从intent中获取ActivityConversionResponse
  9. 10.                 ActivityConversionResponse activityConversionResponse = ActivityConversionResponse.getDataFromIntent(intent);
  10. 11.                 List<ActivityConversionData> list = activityConversionResponse.getActivityConversionDatas();
  11. 12.             }
  12. 13.         }
  13. 14.     }

15. }

说明

海外版本手机活动识别不支持骑行和乘车。

活动识别API服务开发的更多相关文章

  1. 地理围栏API服务开发

    地理围栏API服务开发 要使用华为地理围栏服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 如果需要使用地理围栏服务 ...

  2. 某简单易懂的人脸识别 API 的开发环境搭建和简易教程

    最近接了个人脸识别相关的项目,是基于某个非常简单易懂的人脸识别 API:face_recognition 做的.这个库接口非常傻瓜,很适合新手上手,而且可以研究其源码来学习 dlib 这个拥有更加灵活 ...

  3. 微信公众平台消息接口开发(24)图片识别之人脸识别API

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 图片识别 人脸识别 API 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archi ...

  4. 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决

    前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...

  5. 免费人脸识别APi

    今天对应一些免费的人脸识别的api 做了一下简单的对比,觉得百度开发出来的人脸识别接口还是最符合的我的要求,简单易用,容易上手. 据说百度的一些门禁也使用上了人脸识别的功能了,功能很强大,而且能识别出 ...

  6. 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发

    <ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...

  7. Google Map API V3开发(1)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...

  8. Google Map API V3开发(2)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...

  9. Google Map API V3开发(4)

    Google Map API V3开发(1) Google Map API V3开发(2) Google Map API V3开发(3) Google Map API V3开发(4) Google M ...

随机推荐

  1. linux下安装并使用msgfmt命令

    msgfmt安装方法: sudo apt-get install gettext 编码 po 文件为 mo 文件: msgfmt -o test.mo test.po mo 文件反编码成 po文件: ...

  2. 【Redis过期Key监听】

    https://blog.csdn.net/wlddhj/article/details/89881055

  3. hdu4126(MST + 树形dp

    题意:       这个题目和hdu4756差不多,是给你一个图,然后是q次改变边的权值,权值只增不减,最后问你每次改变之后的最小树的平均值是多少. 思路:(prim+树形dp)       先跑一边 ...

  4. POJ2349二分+并查集,类似最小树的贪心

    题意:       给你n个点,你的任务是构建一颗通讯树,然后给你一个s表示可以选出来s个点两两通讯不花钱,就是费用是0,其他的费用就是两点的距离,有个要求就是其他的费用中最大的那个最小. 思路:   ...

  5. 神经网络与机器学习 笔记—Rosenblatt感知器收敛算法C++实现

    Rosenblatt感知器收敛算法C++实现 算法概述 自己用C++实现了下,测试的例子和模式用的都是双月分类模型,关于双月分类相关看之前的那个笔记: https://blog.csdn.net/u0 ...

  6. Day001 电脑常用快捷键

    电脑常用快捷键 Ctrl+C 复制 Ctrl+V 粘贴 Ctrl+A 全选 Ctrl+X 剪切 Ctrl+Z 撤销 Ctrl+S 保存 Alt+F4 关闭窗口(英雄联盟选英雄界面可以查看对面阵容(狗头 ...

  7. Spring Security 入门篇

    本文是一个笔记系列,目标是完成一个基于角色的权限访问控制系统(RBAC),有基本的用户.角色.权限管理,重点在Spring Security的各种配置.万丈高楼平地起,接下来,一步一步,由浅入深,希望 ...

  8. Mybatis学习之自定义持久层框架(二) 自定义持久层框架设计思路

    前言 上一篇文章讲到了JDBC的基本用法及其问题所在,并提出了使用Mybatis的好处,那么今天这篇文章就来说一下该如何设计一个类似Mybatis这样的持久层框架(暂时只讲思路,具体的代码编写工作从下 ...

  9. “深度评测官”——记2020BUAA软工软件案例分析作业

    项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任建) 这个作业的要求在哪里 个人博客作业-软件案例分析 我在这个课程的目标是 完成一次完整的软件开发经历并以博客的方式记录开发 ...

  10. CentOS7 / CentOS8 设置终端屏幕分辨率

    Centos7 修改文件 /boot/grub2/grub.cfg 搜索 linux16 / /vmlinuz-3.10.0-123.el7.x86_64 root=UUID=881ac4e6-4a5 ...