活动识别API服务开发
要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中。
指定应用权限
• 在Android Q以下版本使用活动识别需要在“AndroidManifest.xml”文件中配置以下权限:
a.
• 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申请以下权限:
.
说明
以上活动识别相关权限属于危险权限,使用时需要动态申请。
注册静态广播
示例代码中活动识别服务的活动状态更新信息需要广播接收,因此需要在“AndroidManifest.xml”文件中注册广播接收器。

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

创建活动识别服务客户端
在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. }
    活动识别更新
    使用活动识别服务,首先需要注册活动识别更新,可以检测用户当前是步行、骑自行车、静止等状态。
  9. 新建PendingIntent。
  10. // 获取自定义静态广播类LocationBroadcastReceiver关联的PendingIntent
  11. private PendingIntent getPendingIntent() {
  12.  Intent intent = new Intent(this, LocationBroadcastReceiver.class);
    
  13.  intent.setAction(LocationBroadcastReceiver.ACTION_PROCESS_LOCATION);
    
  14.  return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
  15. }
  16. 监听活动识别更新请求。
    通过调用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一个参数为活动检测更新间隔(单位为毫秒),第二个参数pendingIntent。
  17. // 创建活动识别请求
  18. activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
  19.  // 请求成功监听回调
    
  20.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  21.      @Override
    
  22.      public void onSuccess(Void aVoid) {
    
  23.          Log.i(TAG, "createActivityIdentificationUpdates onSuccess");
    
  24.      }
    
  25.  })
    
  26. // 请求失败监听回调
    
  27. .addOnFailureListener(new OnFailureListener() {
    
  28.     @Override
    
  29.     public void onFailure(Exception e) {
    
  30.         Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  31.     }
    
  32. });
    
  33. 移除活动识别更新。
    在使用完活动识别后需要进行移除操作。调用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活动识别定时监听,参数PendingIntent必须与createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)参数里的PendingIntent是同一个。
  34. // 移除活动识别更新
  35. activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
  36.  // 移除回调成功监听回调
    
  37.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  38.      @Override
    
  39.      public void onSuccess(Void aVoid) {
    
  40.          Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess");
    
  41.      }
    
  42.  })
    
  43. // 移除回调失败监听回调
    
  44. .addOnFailureListener(new OnFailureListener() {
    
  45.     @Override
    
  46.     public void onFailure(Exception e) {
    
  47.         Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage());
    
  48.     }
    
  49. });
    
  50. 活动识别结果获取。
    通过广播接收到的intent中获取活动识别结果。
  51. // 活动识别广播接收者
  52. public class LocationBroadcastReceiver extends BroadcastReceiver {
  53.  // 活动识别服务广播action
    
  54.  public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
    
  55.  @Override
    
  56.  public void onReceive(Context context, Intent intent) {
    
  57.      if (intent != null) {
    
  58.          final String action = intent.getAction();
    
  59.         if (ACTION_PROCESS_LOCATION.equals(action)) {
    
  60.              // 从活动识别服务发送的intent的extras中获取ActivityIdentificationResponse
    
  61.              ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent);
    
  62.              List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas();
    
  63.         }
    
  64.     }
    
  65. }
    
  66. }
    活动过渡更新
    接口提供检测活动过渡条件(进入、退出)的功能,例如需要检测用户从走路变为骑自行车的状态时,应用通过调用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法获取活动过渡的状态变化。
  67. 设置监听活动过渡请求参数。
  68. // 创建一个静止状态进入活动转换信息对象
  69. ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
  70. // 创建一个静止状态退出活动转换信息对象
  71. ActivityConversionInfo activityConversionInfoStillExit = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION);
  72. List activityConversionInfos = new ArrayList<>();
  73. activityConversionInfos.add(activityConversionInfoStillEnter);
  74. activityConversionInfos.add(activityConversionInfoStillExit);
  75. // 创建一个活动转换请求体实例
  76. ActivityConversionRequest request = new ActivityConversionRequest();
  77. request.setActivityConversions(activityConversionInfos);
  78. 监听活动过渡更新。
  79. // 监听活动识别状态转换
  80. Task task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
  81. // 任务成功监听回调
  82. task.addOnSuccessListener(new OnSuccessListener() {
  83.      @Override
    
  84.      public void onSuccess(Void aVoid) {
    
  85.          Log.i(TAG, "createActivityConversionUpdates onSuccess");
    
  86.      }
    
  87.  })
    
  88. // 任务失败监听回调
    
  89. .addOnFailureListener(new OnFailureListener() {
    
  90.     @Override
    
  91.     public void onFailure(Exception e) {
    
  92.         Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage());
    
  93.     }
    
  94. });
    
  95. (可选)移除活动过渡更新。
    不需要监听活动过渡条件时,需要调用deleteActivityConversionUpdates(PendingIntent pendingIntent)进行移除操作。
  96. // 通过指定pendingIntent移除活动转换更新
  97. activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
  98.  // 移除更新成功监听回调
    
  99.  .addOnSuccessListener(new OnSuccessListener<Void>() {
    
  100.      @Override
    
  101.      public void onSuccess(Void aVoid) {
    
  102.          Log.i(TAG, "deleteActivityConversionUpdates onSuccess");
    
  103.      }
    
  104.  })
    
  105. // 移除更新失败监听回调
    
  106. .addOnFailureListener(new OnFailureListener() {
    
  107.     @Override
    
  108.     public void onFailure(Exception e) {
    
  109.         Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage());
    
  110.     }
    
  111. });
    
  112. 返回结果获取。
    活动过渡的结果:
  113. public class LocationBroadcastReceiver extends BroadcastReceiver {
  114.  public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
    
  115.  @Override
    
  116.  public void onReceive(Context context, Intent intent) {
    
  117.      if (intent != null) {
    
  118.          final String action = intent.getAction();
    
  119.          if (ACTION_PROCESS_LOCATION.equals(action)) {
    
  120.              // 从intent中获取ActivityConversionResponse
    
  121.             ActivityConversionResponse activityConversionResponse = ActivityConversionResponse.getDataFromIntent(intent);
    
  122.             List<ActivityConversionData> list = activityConversionResponse.getActivityConversionDatas();
    
  123.         }
    
  124.     }
    
  125. }
    
  126. }
    说明
    海外版本手机活动识别不支持骑行和乘车。

活动识别API服务开发相关推荐

  1. 地理围栏API服务开发

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

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

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

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

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

  4. 免费集装箱号识别API免费集装箱信息识别,中国人工智能企业CIMCAI集装箱识别云服务全球4千企业用户,中国人工智能企业智慧港航

    免费集装箱号识别API免费集装箱信息识别API,CIMCAI飞瞳引擎™集装箱人工智能平台全球4千企业用户, 全球领先的飞瞳引擎™AI集装箱识别云服务,集装箱残损识别箱况检测缺陷检验, 小程序拍照检测或 ...

  5. 集装箱号识别API免费箱号识别免费,中国上海人工智能中集飞瞳全球领先AI集装箱识别检测云服务,智慧港航智能化港航中国上海人工智能

    集装箱号识别API免费箱号识别免费,中国上海人工智能中集飞瞳, 全球领先AI集装箱识别检测云服务,智慧港航智能化港航. 全球领先CIMCAI ENGINE集装箱AI检测云服务,集装箱号识别率99.98 ...

  6. 集装箱号识别API免费信息识别免费,中国人工智能企业中集飞瞳全球最大AI集装箱识别检测云服务,智慧港航智能化港航中国人工智能企业

    集装箱号识别API免费信息识别免费,先进人工智能AI科技打造CIMCAI ENGINE™集装箱检测云服务, 中国人工智能企业CIMCAI全球最大AI集装箱识别检测云服务商,全球4千+企业用户使用, 集 ...

  7. Eolink征文活动---Eolink API文档服务的天才产品

    实际上我并不是因为这次活动才知道Eolink,早在几年前,我就成为了Eolink的使用者,所以,这次征文活动我势在必行!本篇文章将会围绕我如何利用Eolink去解决项目问题进行展开讨论,大致分为以下内 ...

  8. 微信小程序开发:调用百度文字识别API实现图文识别

    1.首先需要开通百度AI图文识别功能 登录[百度智能云],创建应用,根据需要开通功能. 创建完成后,打开应用管理,查看已创建的应用的AppID,API Key,Secret Key. 2.小程序端的开 ...

  9. API开发平台,企业级API服务发布平台

    API开发平台基于微服务架构快速开发API接口服务,是一款轻量级的API服务发布平台.可快速的开发企业级前后端分离的业务系统,通过建立数据模型和业务模型能够无代码快速的发布API服务. RestClo ...

最新文章

  1. python opencv按照一定间隔保存视频帧
  2. 在虚拟机环境下,电脑间拷贝配置好的伪分布式Hadoop环境,出现namenode不能启动的问题!...
  3. 等差数列划分 II - 子序列(动态规划)
  4. 【CSDN】-京东云部署java项目及性能测试
  5. qt调用外部程序(exe)
  6. 47 - 算法 - Leetcode -167-两数之和 - 输入有序数组
  7. TensorFlow strides 参数讨论
  8. 中国政法大学政治与公共管理学院丛日云教授在毕业典礼上的演讲在网络上暴红,
  9. hdu4588Count The Carries
  10. 系统集成项目-管理工程师教程·一
  11. aizu 0121 Seven Puzzle
  12. android 颜色渐变扩散,Android 颜色渐变(gradient)的实现总结
  13. 解决win7 svchost占用CPU过高的问题
  14. laravel 利用auth完成前台和后台的登录模块
  15. 机器语言、汇编语言(低级语言)、高级语言
  16. DQ77KB刷bios工程小记-old文章备份
  17. 想要职场安全感?那就请你别停止成长
  18. 2020年还需要阅读的10篇人工智能论文(附链接)
  19. mysql gtid 同步_结合案例说说5.7使用gtid同步后,mysql.gtid_executed引起的从库gtid断层...
  20. 主板维修测试软件,维修主板的必备工具主板诊断卡的使用方法

热门文章

  1. java 数据结构 无向图_数据结构-无向图
  2. 正确“假期休息模式”
  3. 自监督学习现状和未来
  4. PyTorch之前向传播函数自动调用forward
  5. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
  6. ResNet网络的训练和预测
  7. CodeGen按钮循环
  8. CEVA引入新的可配置传感器集线器DSP架
  9. 为放大器模拟输入模块提供可靠的输入过电压保护
  10. [JavaScript] 探索JS中的函数秘密