Android平台提供四个传感器,让您监控各种环境属性。 您可以使用这些传感器来监控Android设备附近的相对环境湿度,照度,环境压力和环境温度。 所有四个环境传感器都是基于硬件的,只有在设备制造商将其构建到设备中时才可用。 除了大多数设备制造商用于控制屏幕亮度的光传感器之外,环境传感器在设备上并不总是可用。 因此,在您尝试从其获取数据之前,您在运行时验证环境传感器是否存在尤为重要。
与大多数运动传感器和位置传感器不同,它们为每个SensorEvent返回传感器值的多维阵列,环境传感器为每个数据事件返回单个传感器值。 例如,温度为°C或压力为hPa。 此外,与通常需要高通或低通滤波的运动传感器和位置传感器不同,环境传感器通常不需要任何数据过滤或数据处理。 表1提供了Android平台支持的环境传感器的总结。
表1. Android平台支持的环境传感器。
传感器 | 传感器事件数据 | 测量单位 | 数据描述 |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE | event.values[0] | °C | 环境空气温度。 |
TYPE_LIGHT | event.values[0] | lx | 照度。 |
TYPE_PRESSURE | event.values[0] | hPa or mbar | 环境空气压力。 |
TYPE_RELATIVE_HUMIDITY | event.values[0] | % | 环境相对湿度。 |
TYPE_TEMPERATURE | event.values[0] | °C | 设备温度。1 |
一、使用光,压力和温度传感器
从光,压力和温度传感器获取的原始数据通常不需要校准,过滤或修改,这使得它们成为使用最简单的传感器。 要从这些传感器获取数据,您首先创建一个SensorManager类的实例,您可以使用它来获取物理传感器的实例。 然后在onResume()方法中注册一个传感器侦听器,并在onSensorChanged()回调方法中开始处理传入的传感器数据。 以下代码显示如何执行此操作:
public class SensorActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mPressure;
@Override
public final void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get an instance of the sensor service, and use that to get an instance of
// a particular sensor.
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mPressure = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// Do something here if sensor accuracy changes.
}
@Override
public final void onSensorChanged(SensorEvent event) {
float millibars_of_pressure = event.values[0];
// Do something with this sensor data.
}
@Override
protected void onResume() {
// Register a listener for the sensor.
super.onResume();
mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause();
mSensorManager.unregisterListener(this);
}
}
您必须始终包含onAccuracyChanged()和onSensorChanged()回调方法的实现。 另外,请确保在活动暂停时始终注销传感器。 这样可以防止传感器连续检测数据并排出电池。
二、使用湿度传感器
您可以使用湿度传感器获取原始相对湿度数据,方式与使用光,压力和温度传感器相同。 但是,如果设备同时具有湿度传感器(TYPE_RELATIVE_HUMIDITY)和温度传感器(TYPE_AMBIENT_TEMPERATURE),则可以使用这两个数据流来计算露点和绝对湿度。
露点
露点是在恒定的气压下必须冷却给定体积的空气以使水蒸气冷凝成水的温度。 以下等式显示如何计算露点:
ln(RH/100%) + m·t/(Tn+t) td(t,RH) = Tn · ------------------------------------ m - [ln(RH/100%) + m·t/(Tn+t)]这里:
td =露点温度(摄氏度)
t =实际温度,单位为摄氏度
RH =实际相对湿度百分比(%)
m = 17.62
Tn = 243.12
绝对湿度
绝对湿度是给定体积干燥空气中水汽的质量。 绝对湿度以克/米3测量。 以下公式显示如何计算绝对湿度:
(RH/100%) · A · exp(m·t/(Tn+t) dv(t,RH) = 216.7 · ------------------------------------ 273.15 + t这里:
dv =绝对湿度,单位:克/米3
t =实际温度,单位为摄氏度
RH =实际相对湿度百分比(%)
m = 17.62
Tn = 243.12摄氏度
A = 6.112 hPa