在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; 调整以下参数即可

先容Oracle中null的运用要领。

51 本源&#xff1a;网海拾贝 问&#xff1a;什么是NULL&#xff1f; 答&#xff1a;在我们不晓得详细有什么数据的时分&#xff0c;也即未知&#xff0c;可以用NULL&#xff0c;我们称它为空&#xff0c;ORACLE中&#xff0c;含有空值的表列长度为零。 ORACLE许可任何一种数据…

Wince6 Eboot中加入开机画面

昨天研究了一下wince开机时加入个性化的画面&#xff0c;折腾了一上午&#xff0c;不是花屏就是CE起不来……终于搞定&#xff0c;分享一下经验吧。。。 Wince加入开机画面方法一般有以下两种&#xff1a; 1、 在文件中下定义一个常量大数组&#xff0c;几百K&#xff0c;如con…

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

人生九度

1.工作方面&#xff0c;能力不敌态度&#xff1b; 2.事业方面&#xff0c;才华不敌韧度&#xff1b; 3.知识方面&#xff0c;广博不敌深度&#xff1b; 4.思想方面&#xff0c;敏锐不敌高度&#xff1b; 5.做人方面&#xff0c;精明不敌气度&#xff1b; 6.做事方面&#xff0c…

platform Builder导出SDK

一、编译好wince系统 二、选择[platform]->[configur SDK]&#xff0c;第一次进入的话&#xff0c;会要求输入一些SDK名字等信息。完成后再一次进入才是配置SDK的属性。 三、有几项需要注意的&#xff1a; CPU选项&#xff1a;若是输出仿真器的SDK&#xff0c;这项不要选入…

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

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

android 从assets和res中读取文件(转)

1. 相关文件夹介绍 在Android项目文件夹里面&#xff0c;主要的资源文件是放在res文件夹里面的。assets文件夹是存放不进行编译加工的原生文件&#xff0c;即该文件夹里面的文件不会像xml&#xff0c;java文件被预编译&#xff0c;可以存放一些图片&#xff0c;html&#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

可以自行设置分辨率

ARM指令 LDR 和 ADR的一些区别

LDR 是ARM中的指令&#xff0c;也是伪指令。 当用 LDR r, imd // r 为寄存器&#xff0c; imd为立即数 LDR 是一条伪指令。编译器会根据 立即数的大小&#xff0c;决定用 ldr 指令或者是mov或mvn指令。 当imd能用mov或者mvn操作时&#xff0c;就将它翻译成一条mov或mvn指令。当…

阻塞 cpu占用

请问&#xff0c;windowsxp系统下&#xff0c;有一个线程A&#xff0c;此线程中需要wait一个信号&#xff0c;我有以下观点&#xff0c;请大家帮我判断一下我的观点对不对&#xff0c;谢谢&#xff01;如果我用阻塞方式&#xff0c;则一旦轮到这个线程执行&#xff0c;os只要发…

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

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

arcgis将点的属性赋值给面

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

关于application title一直是untitled的问题

建立了一个cocoaapplication项目&#xff0c;在Interface Builder中修改了title&#xff0c;在运行时标题始终是“Untitled”。这是我在http://stackoverflow.com/questions/4720030/cocoa-mac-application-title-says-untitled上找的解决方法。I have created a document base…

python 中文apichm_python api 中文 chm

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里技术人对外发布原创技术内容的最大平台&…