在android studio中如何创建一个类来继承另外一个类_在Android使用Transition API检测用户活动...

在当今世界,移动设备是我们日常生活中必不可少的一部分,我们在走路、跑步、开车以及其他许多活动时都会使用移动设备。

了解用户拿着手机的时候在做什么,可以让你的应用程序根据用户的动作进行直观的调整。对于某些应用程序,确定用户何时开始或停止某个特定活动可能是必要的。例如,一个应用程序可以在用户开始跑步的时候在后台启动音乐,或者计算燃烧的卡路里数。

在今天的文章中,我们将学习如何在Android中检测和识别用户活动,这样,你的应用程序将在与用户交互方面更加智能化,并能够提供高度定制的体验。

为此,我们将使用Activity Recognition Transition API。这个库建立在可用的设备传感器(陀螺仪、加速计等)上,以高精度检测用户活动的变化。此外,也许最重要的是,它消耗更少的电力。

faaa0a72b5b27cdc159b10c0457f89d1.png

本篇文章假定你已有使用Kotlin和AndroidX构建安卓应用程序的经验.

项目设置

首先在Android Studio中创建一个新项目,或者打开一个现有的项目,在其中添加活动识别功能。

首先要配置的是依赖项。在应用程序的build.gradle文件添加如下行:

首先要配置的是依赖项。在应用程序的build.gradle文件添加如下行:

dependencies {//.... other dependenciesimplementation "com.google.android.gms:play-services-location:17.0.0"implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
}

接下来,在AndroidManifest.xml添加权限:

接下来,在AndroidManifest.xml添加权限:

<!-- Required for 28 and below -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" /><!-- Required for 29+. -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />

注意:在API 29及以上,您需要动态请求权限。

活动类型

Transition API使您能够检测到用户的多种活动类型—下面是列表:

  • IN_VEHICLE: 表示设备在车内
  • ON_BICYCLE: 表示设备在自行车上
  • RUNNING: 表示设备用户在跑步
  • ON_FOOT: 表示设备用户正在走路或者跑步
  • STILL: 表示设备没有在移动
  • WALKING: 表示设备用户在走路

API还让您知道特定的活动是即将开始还是即将结束。这由转换类型表示:

  • ACTIVITY_TRANSITION_ENTER: 用户开始特定活动
  • ACTIVITY_TRANSITION_EXIT: 用户推出特定活动

在接下来的几节中,我们需要知道我们要查找的类型和活动名称。

建立一个API请求

为了告诉API要监控哪些活动,我们需要事先知道活动名称和转换类型。然后,我们创建一个ActivityTransition对象的列表,并从这个列表中创建activityTransitionRequest对象来构造请求。

下面我们来看看如何实现这一点:

val 

接收结果

在继续之前,我们需要设置一个地方来接收API的更新。例如,一个更新可以是用户进入IN_VEHICLE,即进入车内活动。

我们可以通过使用BroadcastReceiver类来实现这一点。我们通过扩展BroadcastReceiver类来创建所需的类,然后重写onReceive()方法以从API接收更新。

在onReceive()方法中,我们在检测到活动后执行所需的操作—可以向用户发送通知,也可以启动后台服务—实际上由您来决定检测到指定活动后如何做。

以下是我们的BroadcastReceiver的实现:

import 

我们使用两个辅助函数activityType和transitionType将整数常量转换为字符串。

连接组件

现在,我们有了一个接收器可以处理API发送的更新,我们可以告诉API从哪里发送。具体步骤如下:

首先,我们创建一个Intent,使用我们定义的变量RECEIVER_ACTION作为参数。

接着,我们从广播接收器和上面的intent创建一个PendingIntent。

val 

在这之后,我们创建一个我们的接收器的实例,并把它注册到LocalBroadcastManager中,使用我们指定的RECEIVER_ACTION作为IntentFilter。

receiver 

让我进一步解释一下这一步。我们知道,BroadcastReceiver可以接收和响应来自其他应用程序或系统的广播消息。但是要做到这一点,首先需要注册这个接收器,我们在上面的代码中使用LocalBroadcastManager进行注册。

当我们注册一个广播接收器时,我们还需要指定响应什么,换句话说,要监听和响应什么事件。我们用自定义的行为RECEIVER_ACTION构建IntentFilter来实现这一点。

作为最后一步,我们请求ActivityRecognition API使用前面创建的PendingIntent和ActivityTransitionRequest进行更新。

val 

以下是前面步骤的完整代码片段:

// creating the pending intent

停止跟踪

在某个时间点,如果您想取消并停止来自API的更新,可以在onStop()或onDestroy()方法,或者在您认为有必要停止跟踪的任何位置执行此操作。

我们需要做两件事来停止识别活动:

  • 注销接收器以停止接收传入数据。
  • 告诉API从我们的接收器中删除更新。

下面的topActivityRecognition()-您可以定义并在必要时调用:

private 

结论

我们在本文中看到了如何检测你的用户的行为,并根据需要作出响应。您可以使用这个强大的API为用户提供高度可定制和身临其境的体验。

原文链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拼接dem,山地出现平地

利用dem做山体阴影&#xff0c;错误示例&#xff1a; 解决办法&#xff1a; 调整以下参数即可

hive 窗口函数_Datatist科技专栏 | Hive排序窗口函数速学教程!

作者&#xff1a;原上野设计&#xff1a;Cindy编辑&#xff1a;AI君在开发过程中经常会遇见排序的场景&#xff0c;比如取top N的问题&#xff0c;这时候row_number(),rank,dense_ran()这三个函数就派上用场了&#xff0c;其中&#xff0c;row_number()最为常用。虽然都可以排序…

arcgis利用python赋值

、 rec0 def autoIncrement(): global rec pStart 1 pInterval 1 if (rec 0): rec pStart else: rec rec pInterval return rec

idea修改代码后没有重新编译_SpringBoot中实现代码修改之后的自动更新与热加载...

在实际的开发过程中&#xff0c;我们经常修改代码之后&#xff0c;手动的重启项目&#xff0c;查看修改效果。那么有没有一种方式能够快速的、自动的帮我们将修改代码自动更新&#xff0c;避免手动重启&#xff0c;从而提高开发效率呢&#xff1f;是有的&#xff0c;对于这个功…

WINCE6开机进度条

大致思路&#xff0c;在NBoot或EBoot加开机进度条&#xff0c;由于WINCE启动主要时间都花在读取NK&#xff0c;因此每读取一定的页&#xff0c;就在屏上画一条固定高度的线&#xff0c;并记录画线的位置&#xff0c;下次接着画&#xff0c;直到读取完NK&#xff0c;这样就产生的…

电脑查看wifi密码

右键 打开“网络。。。。。。”

软件oem要注意什么_做化妆品oem,选择化妆品包材要注意什么问题

化妆品企业找厂家做oem&#xff0c;一般厂家都是负责设计研发生产的&#xff0c;但是设计出来的产品包材&#xff0c;就需要找其它的包材厂家去采购了&#xff0c;很多没有经验的品牌商都不清楚找包材要怎么找&#xff0c;好看质量好就可以了吗&#xff1f;韵丽生物科技化妆品代…

等高线转dem

可以自行设置分辨率

登录验证应该是进行在客户端还是服务器端_网站登录认证方式

目前大部分软件系统资源访问都是使用HTTP协议&#xff0c;HTTP是无状态的协议&#xff0c;每次请求默认都是相互独立的。但是大部分情况下我们需要记录请求资源的用户信息&#xff0c;也就是保存会话&#xff0c;从而对资源的访问做限制&#xff0c;这是我们认证功能。常用的认…

arcgis将点的属性赋值给面

例子&#xff1a;将点的编号属性列赋值到对应的面属性

arcgis投影数据计算度分秒

原始数据投影坐标系 1.先将图层坐标改为地理坐标系 2.添加字段必须是文本类型&#xff0c;否则计算不出度分秒的形式&#xff0c;只显示十进制 错误示例&#xff08;字段类型为双精度&#xff09; 正确示例&#xff08;字段类型为文本类型&#xff09;

arcgis裁剪后发现部分矢量缺失

解决办法 1.先修复几何 2.再进行裁剪 修复几何 修复的内容如下

arcgis快速创建斜坡单元剖面线

本教程做出的剖面只能用作参考&#xff0c;实际工作中需要进行修改 一、数据&#xff1a; 1.斜坡单元 DEM 步骤 利用DEM做出坡向2.提取斜坡单元内部点数据 提取斜坡单元边界线数据 提取坡向数据至点属性 3.给带有剖面点的数据添加xy坐标字段&#xff0c;数据类型选择数值型 添…

mapgis转arcgis数据后发现属性表内没有数据

示例&#xff1a; 编辑点属性结构 将注释赋为属性

分享50款非常漂亮的桌面壁纸

我喜欢根据季节更换桌面壁纸&#xff0c;换上一张清爽的桌面壁纸&#xff0c;心情也会变得舒畅。所以&#xff0c;今天我为大家收集了一批夏天壁纸&#xff0c;虽然夏天还未到来&#xff0c;不过这些壁纸真的非常漂亮&#xff0c;尽情欣赏吧。 &#xff08;编译来源&#xff1a…

获取字段 命名空间和类_系统架构之命名规范

数据库设计规范表设计规范表名全部小写&#xff0c;单词间通过_间隔主键命名为id&#xff0c;类型为Long&#xff0c;长度为20位&#xff0c;非自增2. 外键及索引命名规范唯一索引&#xff1a;ux_表名_索引字段。如&#xff1a;ux_resource_code普通索引&#xff1a;ix_表名_索…

arcgis创建剖面线execl文件

如何快速创建剖面线&#xff0c;参考https://blog.csdn.net/qq_39397927/article/details/118730100 由于创建完的剖面线不带有野外编号&#xff0c;所以我们需要进行空间连接&#xff0c;因为斜坡单元转点后的数据是具有编号&#xff0c;所以进行空间连接将斜坡编号赋值给剖面…

arcgis计算地形起伏度

不懂的方面请进群询问

由于在客户端检测到一个协议错误_TLS协议的分析

TLS概述TLS&#xff08;传输层安全性&#xff09;协议基于SSL&#xff08;安全套接字层&#xff09;协议&#xff0c;该协议最初由Netscape开发&#xff0c;用于增强Internet上的电子商务安全性。SSL是在应用程序级实现的&#xff0c;直接位于TCP&#xff08;传输控制协议&…