活动识别API服务开发
活动识别API服务开发
要使用华为活动识别服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中。
指定应用权限
- 在Android Q以下版本使用活动识别需要在“AndroidManifest.xml”文件中配置以下权限:
- <uses-permission android:name="com.huawei.hms.permission.ACTIVITY_RECOGNITION"/>
- 在Android Q及以上版本中,需要在“AndroidManifest.xml”文件中申请以下权限:
. <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
说明
以上活动识别相关权限属于危险权限,使用时需要动态申请。
注册静态广播
示例代码中活动识别服务的活动状态更新信息需要广播接收,因此需要在“AndroidManifest.xml”文件中注册广播接收器。
- <!--注册活动识别服务广播接收器-->
- <receiver
- android:name=".location.fusedlocation.LocationBroadcastReceiver"
- android:exported="true">
- <intent-filter>
- <action android:name="com.huawei.hmssample.location.LocationBroadcastReceiver.ACTION_PROCESS_LOCATION" />
- </intent-filter>
- </receiver>
创建活动识别服务客户端
在Activity的OnCreate()方法中创建一个ActivityIdentificationService实例,通过该实例调用活动识别相关接口:
- private PendingIntent pendingIntent;
- private ActivityIdentificationService activityIdentificationService;
- protected void onCreate(Bundle savedInstanceState) {
- // 通过ActivityIdentification.getService()创建activityIdentificationService实例
- activityIdentificationService = ActivityIdentification.getService(this);
- // 获取PendingIntent对象
- pendingIntent = getPendingIntent();
- }
活动识别更新
使用活动识别服务,首先需要注册活动识别更新,可以检测用户当前是步行、骑自行车、静止等状态。
- 新建PendingIntent。
- // 获取自定义静态广播类LocationBroadcastReceiver关联的PendingIntent
- private PendingIntent getPendingIntent() {
- Intent intent = new Intent(this, LocationBroadcastReceiver.class);
- intent.setAction(LocationBroadcastReceiver.ACTION_PROCESS_LOCATION);
- return PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
- }
- 监听活动识别更新请求。
通过调用createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)方法,第一个参数为活动检测更新间隔(单位为毫秒),第二个参数pendingIntent。
- // 创建活动识别请求
- activityIdentificationService.createActivityIdentificationUpdates(5000, pendingIntent)
- // 请求成功监听回调
- .addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- Log.i(TAG, "createActivityIdentificationUpdates onSuccess");
- }
- })
- 10. // 请求失败监听回调
- 11. .addOnFailureListener(new OnFailureListener() {
- 12. @Override
- 13. public void onFailure(Exception e) {
- 14. Log.e(TAG, "createActivityIdentificationUpdates onFailure:" + e.getMessage());
- 15. }
- 16. });
- 移除活动识别更新。
在使用完活动识别后需要进行移除操作。调用deleteActivityIdentificationUpdates(PendingIntent pendingIntent)移除活动识别定时监听,参数PendingIntent必须与createActivityIdentificationUpdates(long detectionIntervalMillis, PendingIntent callbackIntent)参数里的PendingIntent是同一个。
- // 移除活动识别更新
- activityIdentificationService.deleteActivityIdentificationUpdates(pendingIntent)
- // 移除回调成功监听回调
- .addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- Log.i(TAG, "deleteActivityIdentificationUpdates onSuccess");
- }
- })
- 10. // 移除回调失败监听回调
- 11. .addOnFailureListener(new OnFailureListener() {
- 12. @Override
- 13. public void onFailure(Exception e) {
- 14. Log.e(TAG, "deleteActivityIdentificationUpdates onFailure:" + e.getMessage());
- 15. }
- 16. });
- 活动识别结果获取。
通过广播接收到的intent中获取活动识别结果。
- // 活动识别广播接收者
- public class LocationBroadcastReceiver extends BroadcastReceiver {
- // 活动识别服务广播action
- public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent != null) {
- final String action = intent.getAction();
- 10. if (ACTION_PROCESS_LOCATION.equals(action)) {
- 11. // 从活动识别服务发送的intent的extras中获取ActivityIdentificationResponse
- 12. ActivityIdentificationResponse activityIdentificationResponse = ActivityIdentificationResponse.getDataFromIntent(intent);
- 13. List<ActivityIdentificationData> list = activityIdentificationResponse.getActivityIdentificationDatas();
- 14. }
- 15. }
- 16. }
17. }
活动过渡更新
接口提供检测活动过渡条件(进入、退出)的功能,例如需要检测用户从走路变为骑自行车的状态时,应用通过调用createActivityConversionUpdates(ActivityConversionRequest request, PendingIntent pendingIntent)方法获取活动过渡的状态变化。
- 设置监听活动过渡请求参数。
- // 创建一个静止状态进入活动转换信息对象
- ActivityConversionInfo activityConversionInfoStillEnter = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.ENTER_ACTIVITY_CONVERSION);
- // 创建一个静止状态退出活动转换信息对象
- ActivityConversionInfo activityConversionInfoStillExit = new ActivityConversionInfo(ActivityIdentificationData.STILL, ActivityConversionInfo.EXIT_ACTIVITY_CONVERSION);
- List<ActivityConversionInfo> activityConversionInfos = new ArrayList<>();
- activityConversionInfos.add(activityConversionInfoStillEnter);
- activityConversionInfos.add(activityConversionInfoStillExit);
- // 创建一个活动转换请求体实例
- ActivityConversionRequest request = new ActivityConversionRequest();
10. request.setActivityConversions(activityConversionInfos);
- 监听活动过渡更新。
- // 监听活动识别状态转换
- Task<Void> task = activityIdentificationService.createActivityConversionUpdates(request, pendingIntent);
- // 任务成功监听回调
- task.addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- Log.i(TAG, "createActivityConversionUpdates onSuccess");
- }
- })
- 10. // 任务失败监听回调
- 11. .addOnFailureListener(new OnFailureListener() {
- 12. @Override
- 13. public void onFailure(Exception e) {
- 14. Log.e(TAG, "createActivityConversionUpdates onFailure:" + e.getMessage());
- 15. }
- 16. });
- (可选)移除活动过渡更新。
不需要监听活动过渡条件时,需要调用deleteActivityConversionUpdates(PendingIntent pendingIntent)进行移除操作。
- // 通过指定pendingIntent移除活动转换更新
- activityIdentificationService.deleteActivityConversionUpdates(pendingIntent)
- // 移除更新成功监听回调
- .addOnSuccessListener(new OnSuccessListener<Void>() {
- @Override
- public void onSuccess(Void aVoid) {
- Log.i(TAG, "deleteActivityConversionUpdates onSuccess");
- }
- })
- 10. // 移除更新失败监听回调
- 11. .addOnFailureListener(new OnFailureListener() {
- 12. @Override
- 13. public void onFailure(Exception e) {
- 14. Log.e(TAG, "deleteActivityConversionUpdates onFailure:" + e.getMessage());
- 15. }
- 16. });
- 返回结果获取。
活动过渡的结果:
- public class LocationBroadcastReceiver extends BroadcastReceiver {
- public static final String ACTION_PROCESS_LOCATION = "com.huawei.hms.location.ACTION_PROCESS_LOCATION";
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent != null) {
- final String action = intent.getAction();
- if (ACTION_PROCESS_LOCATION.equals(action)) {
- // 从intent中获取ActivityConversionResponse
- 10. ActivityConversionResponse activityConversionResponse = ActivityConversionResponse.getDataFromIntent(intent);
- 11. List<ActivityConversionData> list = activityConversionResponse.getActivityConversionDatas();
- 12. }
- 13. }
- 14. }
15. }
说明
海外版本手机活动识别不支持骑行和乘车。
活动识别API服务开发的更多相关文章
- 地理围栏API服务开发
地理围栏API服务开发 要使用华为地理围栏服务API,需要确保设备已经下载并安装了HMS Core(APK),并将Location Kit的SDK集成到项目中. 指定应用权限 如果需要使用地理围栏服务 ...
- 某简单易懂的人脸识别 API 的开发环境搭建和简易教程
最近接了个人脸识别相关的项目,是基于某个非常简单易懂的人脸识别 API:face_recognition 做的.这个库接口非常傻瓜,很适合新手上手,而且可以研究其源码来学习 dlib 这个拥有更加灵活 ...
- 微信公众平台消息接口开发(24)图片识别之人脸识别API
微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 图片识别 人脸识别 API 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archi ...
- 【.NET6】gRPC服务端和客户端开发案例,以及minimal API服务、gRPC服务和传统webapi服务的访问效率大对决
前言:随着.Net6的发布,Minimal API成了当下受人追捧的角儿.而这之前,程序之间通信效率的王者也许可以算得上是gRPC了.那么以下咱们先通过开发一个gRPC服务的教程,然后顺势而为,再接着 ...
- 免费人脸识别APi
今天对应一些免费的人脸识别的api 做了一下简单的对比,觉得百度开发出来的人脸识别接口还是最符合的我的要求,简单易用,容易上手. 据说百度的一些门禁也使用上了人脸识别的功能了,功能很强大,而且能识别出 ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- 05- 移动端APP的分类 与对比webApp hybridApp nativeApp
随着智能手机的普及,移动端应用几乎成为每个互联网产品的标配.在快速迭代的互联网战场中高效开发.低成本上线产品,是每个应用开发团队追求的目标.此时,选择合适的应用类型和开发模式便至关重要.移动应用可以粗 ...
- Linux连接Windows服务器以及文件传输方法
Ubantu系统上连接Windows服务器,操作步骤 安装rdesktop sudo apt-get install rdesktop 连接命令 rdesktop -f IP -r disk:mydi ...
- Dalvik模式下System.loadLibrary函数的执行流程分析
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78212010 Android逆向分析的过程中免不了碰到Android so被加固的 ...
- LA3602DNA序列
题意: 给你一个一些DNA序列(只有ACGT)然后让你构造一个序列,使得所有的序列到他的Hamming距离最小,所有的序列包括构造的序列长度都是N,Hamming表示两个序列的不同字符位置个 ...
- Day007 递归
递归 定义 A方法调A方法!就是自己调自己 作用 利用递归可以用简单的程序来解决一些复杂的问题.它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程 ...
- 【maven】mvn不是内部命令 也不是可运行的程序
按解压.配置环境变量,重启cmd,还是出现这个问题 使用java -version确定是不是安装了jdk.因为maven是java开发,需要依赖jdk 将系统变量中Path的%MAVEM_HOME%\ ...
- Git 系列教程(5)- 记录每次更新到仓库
文件状态 你工作目录下的每一个文件只有两种状态:tracked 或 untracked tracked 已跟踪 tracked 的文件是指那些被纳入了版本控制的文件 在上一次快照中有它们的记录,在工作 ...
- Spring核心结构及核心思想
Spring核心结构 基本概念 Spring是⼀个分层⾮常清晰并且依赖关系.职责定位⾮常明确的轻量级框架,主要包括⼏个⼤模块:数据处理模块.Web模块.AOP(Aspect Oriented Prog ...
- Vue(1):用Vue-cli构建Vue3项目
使用Vue-cli构建Vue3项目 1.检查node版本 node -v 以上node版本位14.15.0满足Vue3项目的创建条件(Vu3需要node 版本8以上) 为什么需要安装node? vue ...
- 敏杰开题——软工团队项目选择与NABCD分析
这是一篇软件工程课程博客 Q A 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目选择 我们在这个课程的目标是 团队协作实践敏捷开发 这个作业在哪个具 ...