Android 传感器相关术语微机电传感器(MEMS)MEMS 通常制作在规格很小的硅芯片上,借用了计算机芯片的制作技术。通常来说,所有的 Android 传感器都使用了这些技术,但是从技术的角度来说,MEMS 指的是在该传感器的部分设计中纳入了物理移动或震动,例如压力传感器、加速度计、陀螺仪等,也有可能是指南针,这些才是真正意义上的 MEMS。
Android 中引用的传感器大致分为两种,原始传感器(物理传感器)和合成传感器(虚拟传感器)。
原始传感器给出从传感器获得的原始数据,并且一个原始传感器对应一个 Android 设备中实际存在的的物理传感器组件。
合成传感器通过结合多个原始传感器的原始数据,或者修改原始传感器的数据,在应用代码和和底层设备之间提供一个抽象层,并为上层业务提供服务。
二元传感器(Binary Sensor)二元传感器,是一种只输出两个值其中之一的传感器。大多数的距离传感器和光传感器都属于二元传感器,因为他们只输出远和近的测量。
连续传感器(Continuous Sensor)连续传感器,测量从最小值到最大值之间的所有的数据。动态范围(Dynamic Range)动态范围指的是传感器能测量的值的范围。例如光传感器的动态范围可以是1~~10000 lux。
饱和状态(Saturation)饱和状态,在传感器视图感测一个超出它的最大测量值时产生。
分辨率(Resolution)在很多情况下,分辨率表示实际能够检测到的最小物理差值。该差值受到噪音的限制。分辨率有时用来描述在考虑系统噪音的情况下,两个信号之间能够检测出的最小差值。在 Android 系统中,分辨率是一个独立于传感器噪音之外的数字分辨率。Android 传感器输出数字信号,例如常见的有8位(256个可能的值)、10位(1024个可能的值)和12位(4096个可能的值)加速度计。最大范围除以可能的值的个数即为输出的分辨率(通过 Sensor.getResolution() 获取的值)。
采样频率(Sampling Frequency)采样频率是两次测量间的时间间隔,以赫兹(Hertz)为单位。在注册监听器的时候,可以指定监听器的延迟和测量速率。可以设置的速率值如下(SensorManager 中):
SENSOR_DELAY_FASTEST
SENSOR_DELAY_GAMESENSOR_DELAY_UI
SENSOR_DELAY_NORMAL(默认值)
Android SDK 提供的与传感器相关的类有(位于 android.hardware 包):
Sensor: 表示传感器的类,它保存有传感器信息:最大范围(Maximum range)、最小范围(Minimum range)、名称(Name)、功率(Power)、分辨率(Resolution)、类型(* TYPE)、供应商(Vendor)、版本(Version);
SensorEvent:表示传感器事件,它可以保存传感器的值,传感器类型、时间戳等信息;
SensorEventListener:提供回调以通知应用传感器相关事件的接口。为了能够接收这些事件,应用需要创建一个类实现 SensorEventListener 接口,并将其注册到 SensorManager。
SensorManager:SensorManager 让你可以访问设备(手机)的全部传感器。和其他的系统服务一样,它允许应用注册或注销传感器相关事件。一旦注册成功,应用将接收到从传感器传来的数据。除了允许应用注册以获取传感器数据以外,SensorManager 还提供处理传感器数据的方法。
SensorEventSensorEvent:是一个数据结构,包含了传感器输出到应用的信息。
accuracy:传感器输出的精度分为四个等级。在这种情况下,accuracy 指的就是输出数据的可靠程度,而不是与物理值的接近程度。可能的 accuracy 值有如下几种(SensorManage 中):
SENSOR_STATUS_ACCURACY_HIGH
SENSOR_STATUS_ACCURACY_MEDIUM
SENSOR_STATUS_ACCURACY_LOW
SENSOR_STATUS_UNRELIABLE
精确度不可靠并不意味着传感器的损坏,有可能是周围环境的变化而引起的。
sensor:传感器对象 Sensor 的对象。timestamp SensorEvent 发生的时间,以毫秒为单位。
values:表示传感器数据的数组。数据的大小以及数据的含义取决于产生数据的传感器。
四、常见的类型
目前 常用Android 设备支持的传感器类型有很多,但是有些手机设备支持的类型也很少,如下: