环境传感器

官方文档链接

Android平台提供了4个传感器以方便检测各种环境的参数,通过使用这些传感器,能感知到Android设备周围的相对湿度、光照强度、周围压力和周围的温度。所有这4个环境传感器全都是基于硬件的,只有当设备厂商内置了它们才可以使用。大多数设备厂商使用光线传感器控制屏幕的亮度,除了这个传感器外,其他环境传感器很少在设备中使用。因此,在从环境传感器中获取数据前,需要动态地检查环境传感器是否存在,对于环境传感器来说,这是尤其重要的。

大多数位移传感器和位置传感器,会通过SensorEvent.value返回一个多维数组,环境传感器和她们不同,它在每个数据事件中,只返回一个单值(SensorEvent.value[0])。例如,以°C为单位的温度传感器或以hPa为单位的压力传感器。另外,不像位移传感器和位置传感器那样常常需要高通或低通过滤,环境传感器通常不需要数据过滤或数据处理。表1总结了Android平台所支持的环境传感器。

表1. Android平台支持的环境传感器

SensorSensor event data计量单位数据描述
TYPE_AMBIENT_TEMPERATUREevent.values[0]°C周围的环境温度
TYPE_LIGHTevent.values[0]lx光照强度。
TYPE_PRESSUREevent.values[0]hPa 或 mbar环境空气压力。
TYPE_RELATIVE_HUMIDITYevent.values[0]%环境相对湿度。
TYPE_TEMPERATUREevent.values[0]°C设备温度 1

1 各个设备的实现不一样,此传感器从Android 4.0(API Level 14)后被标注为deprecated。

光照,压力和温度传感器的使用

从光照、压力、温度传感器中获得的数据通常不需要校正、过滤或修改等处理,它们是最容易使用的传感器。为了从这些传感器中获取数据,首先需要创建一个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() 回调函数的实现。另外,保证在activity pause时unregister sensor,这样可以避免传感器持续采集数据从而耗费电池电量。

湿度传感器的使用

通过使用湿度传感器能够获得相对湿度的原始数据,使用方法和光照,压力和温度传感器一样。然而,如果设备上同时又湿度传感器(TYPE_RELATIVE_HUMIDITY) 和温度传感器(TYPE_AMBIENT_TEMPERATURE),可以使用这两种传感器的数据流计算出露点温度和绝对湿度。

露点温度

露点温度是指在恒定的气压 下,定量的空气从水蒸气被冷却到水的温度。下面是计算露点的公式:

td(t,RH)=Tnln(RH/100%)+mt/(Tn+t)m[ln(RH/100%)+mt/(Tn+t)]

这里,

td = 以摄氏度为单位的露点温度
t = 以摄氏度为单位的实际温度
RH = 以百分比(%)为单位的实际相对湿度
m = 17.62
Tn = 243.12

绝对湿度

绝对湿度是指定量干燥空气中所含水蒸气的质量。绝对湿度的计量单位是克/米 3 。以下是计算绝对湿度的公式:

dv(t,RH)=216.7(RH/100%)Aexp(mt/(Tn+t)273.15+t

这里,

dv = 单位为 g/m3 为单位的绝对湿度
t = 以摄氏度为单位的实际温度
RH = 以百分比(%)为单位的实际相对湿度
m = 17.62
Tn = 243.12 摄氏度
A = 6.112 hPa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值