1.Android传感器概述
Android 传感器属于虚拟设备,可提供来自以下各种物理传感器的数据:加速度计、陀螺仪、磁力计、气压计、湿度传感器、压力传感器、光传感器、近程传感器和心率传感器。
每个 Android 传感器都有一个“类型”,表示传感器的行为及其提供的数据。
(1)官方 Android 传感器类型在 sensors.h 中的 SENSOR_TYPE_ 名称下进行定义。
(2)绝大多数传感器都具有官方传感器类型。
(3)这些类型记录在 Android SDK 中。
(4)此类传感器的行为在 Android 兼容性测试套件 (CTS) 中进行测试。
(5)如果制造商在 Android 设备上集成了一种新型传感器,则可以自行定义一个临时类型来引用它。
2.传感器堆栈
下图显示了 Android 传感器堆栈。各个组件仅可与其上方和下方紧邻的组件通信,不过某些传感器可以绕过传感器中枢(如果存在)进行通信。控制信号从应用向下流向传感器,数据从传感器向上流向应用。
2.1应用
Android应用是我们需要开发的,也是熟悉Android传感器必须学习的步骤。通过Application开发,能够快速熟悉基础的Android传感器开发。也能够自己基于各种传感器开发一些非常好的App。
对于学生,可以开发一些App,参加比赛,或者一些课程设计作业,非常具有特色。能够提升个人能力。
2.2 SDK
熟悉基础的应用开发后,我们应该进一步深入SDK,通过看SDK源码,进一步熟悉传感器。
应用通过 Sensors SDK(软件开发套件)API 访问传感器。SDK 包含用以列出可用传感器和注册到传感器的函数。
在注册到传感器时,应用可指定自己的首选采样率和延迟要求。
例如:应用可注册到默认加速度计,以 100Hz 的频率请求事件,并允许事件报告有 1 秒延迟。应用将以至少 100Hz 的频率从加速度计接收事件,且最多会延迟 1 秒。
2.3框架
框架负责将多个应用关联到 HAL。HAL 本身是单一客户端。如果框架级别没有发生这种多路复用,则在任何指定时间内每个传感器都只能被一个应用访问。
(1)当第一个应用注册到传感器时,框架会向 HAL 发送请求以激活传感器。
(2)当其他应用注册到相同的传感器时,框架会考虑每个应用的要求,并将更新的已请求参数发送到 HAL。
(3)当注册到某个传感器的最后一个应用取消注册之后,框架会向 HAL 发送请求以停用该传感器,从而避免不必要的功耗。
2.4多路复用的影响
在框架中实现多路复用层的这一需求说明了一些设计决策的原因。
(1)当应用请求特定采样率时,不能保证事件不会以更快的频率到达。如果另一个应用以更快的频率请求同一传感器,则第一个应用也将以那个快的频率来接收事件。
(2)请求的最大报告延迟同样无法得到保证:应用可能以比请求的延迟短的多的延迟接收事件。
(3)除了采样率和最大报告延迟之外,应用还无法配置传感器参数。
例,假设某个物理传感器可同时在“高精确度”和“低电耗”模式下运行。
这两种模式中只有一种可以在 Android 设备上使用,因为若非如此,一个应用可能请求高精确度模式,而另一个可能请求低电耗模式,而框架根本无法同时满足这两个应用的要求。框架必须始终能够满足所有客户端的需要,因此同时使用两种模式是不可行的。
(4)没有将数据从应用向下发送至传感器或其驱动程序的机制。这样可以确保某个应用无法修改传感器的行为,从而不会对其他应用造成破坏。
2.5传感器融合
Android 框架为部分复合传感器提供默认实现。如果设备上有陀螺仪、加速度计和磁力计,但没有旋转矢量传感器、重力传感器和线性加速度传感器,则 Android 框架会实现这些传感器,以便应用仍可以使用它们。
默认实现无法访问其他实现可以访问的所有数据,并且必须在 SoC 上运行,因此它不像其他实现那样精准和省电。设备制造商应尽可能定义自己的融合传感器(旋转矢量传感器、重力传感器和线性加速度传感器,以及游戏旋转矢量传感器等较新的复合传感器),而非依赖该默认实现。此外,设备制造商也可以要求传感器芯片供应商为其提供实现。
默认的传感器融合实现没有相关的维护,且可能导致依赖它的设备无法通过 CTS 验证。
白浪介绍:
(1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链,Java、Android、C/C++、python等综合能力的培养提升。
(2)各种学习资料、学习软件分享(仅供学生学习)。
1.扫码关注公众号(Geekxiaobai)
2. 如在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。
3. 扫码关注后,查看往期内容,会有更多资料惊喜等着你来拿哦
想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。
========******=========******========******=========******==========