Android 中的环境传感器有如下几种(来自于 Sensor):
- TYPE_LIGHT 光传感器
- TYPE_PROXIMITY 接近传感器
- TYPE_PRESSURE 气压传感器
- TYPE_RELATIVE_HUMIDITY 相对湿度传感器
- TYPE_AMBIENT_TEMPERATURE 环境温度传感器
- TYPE_TEMPERATURE 温度传感器(CPU)
光传感器(Light Sensor)
光传感器主要用来检测手机周围光的强度,与其他传感器不同的是,该传感器只读取一个数值即手机周围光的强度。光线传感器输出的值以 lux 为单位,通常的动态范围为1~30000lux。光线传感器的分辨率为1lux。
光线传感器通常被用于根据环境光线来调节屏幕亮度。
光线传感器中定一个常量值(SensorManager):
- LIGHT_NO_MOON = 0.001f luminance at night with no moon in lux(没有月亮的晚上)
- LIGHT_FULLMOON = 0.25f luminance at night with full moon in lux(满月的晚上)
- LIGHT_CLOUDY = 100.0f luminance under a cloudy sky in lux(阴天)
- LIGHT_SUNRISE = 400.0f luminance at sunrise in lux(日出时分)
- LIGHT_OVERCAST = 10000.0f luminance under an overcast sky in lux(多云天气)
- LIGHT_SHADE = 20000.0f luminance in shade in lux(日光下的物体影子里)
- LIGHT_SUNLIGHT = 110000.0f luminance of sunlight in lux(阳光明媚)
- LIGHT_SUNLIGHT_MAX = 120000.0f Maximum luminance of sunlight in lux(比上一个还要明媚)
接近传感器(Proximity Sensor)
接近传感器包含一个在光电探测器边上的弱红外 LED(发光二极管),当有物体距离传感器足够近时,光电探测器会检测到物体反射的红外光。
LED 并不是一直亮着,而是以一定的脉冲开关。光电探测器锁定在一定的脉冲频率上从而让光电探测器对在该频率内未改变的光线并不敏感。光电探测器只会捕捉以 LED 准确频率为脉冲的光线。脉冲频率并不可控,因为接近传感器器通常是在内部检测光电探测器信号的第三方硬件,它只确定接近状态,通常只能为应用程序提供远或近两种状态。
一些接近传感器会测量以厘米为单位的传感器与物体之间的距离,另外一部分接近传感器则用来测量在一个阀值距离内物体是否存在。
二元传感器典型的动态范围在5cm 左右,更有意义的数据是范围在2cm 到4cm 的近似距离阀值。
二元输出的接近传感器是基于中断的,传感器会在过渡到接近状态(由近及远或者由远及近)
时产生对 onSensorChanged()
方法的调用。
气压传感器(Pressure Sensor)
气压传感器用来测量的是 MEMS 气压。典型的 MEMS 压力传感器的测量范围是300~1100 mbar,分辨率为0.01mbar。
气压以每小时0.5 millibar(mbar)漂移是正常的。由于大气潮汐和温度改变等方面的影响,气压一般周期性(每天)的上升下降两次。
通过使用 SensorManager.getAltitude(float p0, float p)
可以根据气压计算出海拔高度(单位米)。该方法基于测出的压力 p 和海平面压力 p0,使用一个标准的物理公式来计算海拔高度(标高)。海平面的压力可以使用:
SensorManager.PRESSURE_STANDARD_ATMOSPHERE
给出了基于相对海拔高度的标准气压1013.25f。- 气象站一般会给出平均海平面压力。
SensorManager.getAltitude使用的计算公式如下所示: