Sensors (传感器)

What are Android sensors? (什么是Android传感器?)

Android传感器用于给应用程序提供访问移动设备上潜在的物理传感器的功能。Android传感器都是用来提供数据的虚拟设备,它们均由HAL层的sensors.h所定义的。(注释:当我们提到Android传感器时指的都是这些虚拟设备,而不是实际的物理设备!Android传感器可能有十多个,但是它们都是由仅有的几个物理传感器实现的。AndroidFramework不会直接访问物理传感器,那么这些虚拟传感器在哪里实现?)

·这些虚拟设备所提供的数据来自一组物理传感器,如: 加速计, 陀螺仪, 磁力计, 气压计, 湿度计, 压力计, 光线强度传感器, 接近传感器以及心率感应器。

·显然,摄像头、指纹传感器、麦克风以及触摸屏不属于当前讨论的所谓物理传感器的范畴。它们有自己的数据上报流程。(注释:它们虽然也是传感器,但是它们不属于“Android传感器”这个抽象)

·上述的分类是随意的, 但是通常Android传感器所需提供的数据传输带宽会更小。比如:加速计只需要“100hz x 3 channels” 。相比之下,摄像头可能需要“25hz x 8 MP x 3 channels” ,或者一个麦克风可能需要“44kHzx 1 channel”(注释:8MP8百万像素)

Android并不关心各个物理传感器和片上系统的连接及交互方式。(注释:包括硬件连接方式和软件工作方式,因为HAL层会对上屏蔽了这些实现!另外这里的SoC指的是AP,下同)

·通常,各个物理传感器芯片会通过sensor hubSoC连接。这样便可在极低耗电量的情况下进行持续监测和数据处理。

·各个物理传感器和Sensorhub的连接通常采用I2C总线或SPI总线。

·为了降低功耗,一些架构设计是分层的。因此,一些简单的数据处理会被交由芯片内的专用集成电路(ASIC)来完成。比如加速计内部的ASIC电路会完成简单的运动监测,而更多的数据处理则会由微控制器完成,比如,计步器就会由Sensor hub通过算法实现。(注释:计步器是一个由加速计实现的虚拟设备)

·架构的选择由终端设备制造商基于精度、功耗、价格、封装形式等特性进行选择。请参考Sensor stack章节部分

·批处理功能对于功耗优化具有重要考量价值。请参考Batching 章节部分。

每一个Android传感器都有一个“类型”参数用来表征该传感器所具备的行为以及该传感器能够提供何种数据。

·Android官方定义的Android传感器类型(Sensor types)sensors.h中定义,并以SENSOR_TYPE_…作为前缀。

o绝大多数传感器都具备官方定义的类型参数

o这些类型信息在AndroidSDK的文档中有描述

oAndroidCTS会对这些类型所对应的传感器的行为进行测试。

·如果终端制造商在一个Android设备上集成进一个新类型的传感器,那么终端制造商可以临时定义一个类型来表示该传感器。

o这些临时定义的类型不会被写入文档,因此应用开发者不大可能会使用它们,他们或许不知道这个临时定义类型的存在,或许知道它们很少使用且只在特定厂商的设备上使用。

oCTS测试不会涉及这些临时定义的类型。

o一旦Android官方为这个新的传感器定义了类型信息,终端制造商就必须用官方的定义取代自己临时的定义。如此,这个新的sensor就可以被更多的应用开发者使用。(注释:上述的临时定义的类型依然指的是Android Sensor,即抽象出来的虚拟传感器,因为Android从来不关心物理传感器!)

·设备上所呈现的传感器列表是由HAL层实现并上报的。(解释:比如,一些传感器检测app所列出的传感器信息。这些信息都是由HAL层上报的,所以,如果HAL层实现了一个错误的传感器是完全可能。)

o多个传感器拥有同一个类型是允许的。比如:系统拥有两个接近传感器或者拥有两个加速度传感器。

o绝大多数的应用程序对一个给定类型的请求,只会对应到唯一的一个传感器,比如:某个应用程序请求获取默认的加速度传感器,那么它将得到系统支持的传感器列表中的第一个加速度传感器。(解释:当列表中存在两个相同类型的传感器时,如果应用程序请求获取该类型的传感器,那么它只会得到其中一个传感器,而不是两个)

oAndroid传感器通常被定义为具备wake-upnon-wake-up属性, 两个传感器允许拥有同一个传感器类型(如上述),却同时拥有不同的wake up属性。

Android传感器提供的数据(传感器事件)是串行的。

每一组传感器事件(event)包含如下三项信息:

·产生该事件的传感器句柄(用以唯一标识该Android传感器)

·一个时间戳,用以表征该事件被检测到或被测量到的时间

·该事件的实际数据信息

其中,对于实际数据信息的解释依赖于传感器类型。请参考sensor type的定义来获取每个传感器类型所上报的数据信息细节。

Exiting documentation (参考文档)

Targetedat developers (面向开发者的(应用开发))

·Overview

ohttps://developer.android.com/guide/topics/sensors/sensors_overview.html

·SDK reference

ohttps://developer.android.com/reference/android/hardware/SensorManager.html

ohttps://developer.android.com/reference/android/hardware/SensorEventListener.html

ohttps://developer.android.com/reference/android/hardware/SensorEvent.html

ohttps://developer.android.com/reference/android/hardware/Sensor.html

·StackOverflow andtutorial websites(注释:StackOverflow是一个专业的问答网站)

oBecause sensorsdocumentation was sometimes lacking, developers resorted to Q&A websiteslike StackOverflow to find answers.

oSome tutorial websitesexist as well, but do not cover the latest features like batching, significant motionand game rotation vectors.

oThe answers over thereare not always right, and show where more documentation is needed.

Targetedat manufacturers (面向终端厂商的)

·Overview

oThisSensorspage and its sub-pages.

·Hardware abstractionlayer (HAL)

ohttps://source.android.com/devices/halref/sensors_8h_source.html

oAlso known as “sensors.h”也就是所谓的“sensors.h”

oThe source of truth.First document to be updated when new features are developed. 源码才是硬道理。当一个新功能被开发出来时要第一时间更新文档。

·Android CDD(Compatibility Definition Document) 兼容性定义文档

ohttps://source.android.com/compatibility/android-cdd.pdf

oSee sections relative tosensors.

oThe CDD is lenient, sosatisfying the CDD requirements is not enough to ensure high quality sensors.该兼容性定义文档是最低要求准则,因此仅仅满足于该兼容性定义文档是不够的,它并不能确保传感器是高质量的

更多相关文章

  1. android Service之四:传递复杂数据类型的远程服务
  2. 自定义View系列教程01--常用工具介绍
  3. Android中自己定义一个shade.xml
  4. Android 自定义View自定义属性的声明
  5. android高仿抖音、点餐界面、天气项目、自定义view指示、爬取美
  6. 【Android】自定义 Tabhost
  7. android常用颜色代码定义
  8. Android 圆形背景shape定义
  9. android 自定义 checkbox

随机推荐

  1. php ucfirst函数怎么用
  2. php mt_rand函数怎么用
  3. php rand函数怎么用
  4. php pi函数是什么意思
  5. php chop函数是什么意思
  6. Android网络状态实时监听实例代码(二)
  7. Android百度地图Poi检索开发总结
  8. Android(安卓)设置 横屏 竖屏
  9. android 一键锁屏 开发
  10. Android中使用PreferenceActivity创建菜