Android开发者指南-环境传感器-Environment Sensors[原创译文]

传感器:


Environment Sensors


英文原文:http://developer.android.com/guide/topics/sensors/sensors_environment.html

版本:Android 4.0 r1


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 或 mbar 周边大气压
TYPE_RELATIVE_HUMIDITY event.values[0] % 周边相对湿度
TYPE_TEMPERATURE event.values[0] °C 设备温度1
1 视设备而各不相同。此传感器自 Android 4.0 (API Level 14) 起已过时。

使用光线、气压、温度传感器

从光线、气压、温度传感器读取的原始数据通常不需要校准、过滤和修正,这使它们列入了最易使用的传感器之中。 要从这些传感器中获取数据,你首先要创建 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);
    // 获取一个传感器服务的实例,用于获取某传感器的一个实例
    mSensorManager =n">= (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];    // 利用这些数据执行一些工作
  }

  @Overrideride
  protected void onResume() {    // 注册一个传感器侦听器
    super.n">.onResume();
    mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {    // 请确保 activity 暂停时注销传感器
    super.n">.onPause();
    mSensorManager.unregisterListener(this);
  }
}

你必须确保同时实现 onAccuracyChanged() 和 onSensorChanged() 回调方法。并且确保在 activity 暂停时注销传感器,以防止传感器持续工作而耗尽电力。 电力。

使用湿度传感器

与光线、气压、温度传感器的使用方式相同,你可以从湿度传感器读取到相对湿度的原始数据。 而且,如果设备同时提供了湿度传感器( 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 = 结露点温度,单位是摄氏度 C
  • t = 当前温度,单位是摄氏度 C
  • RH = 当前相对湿度,单位是百分比 (%)
  • m = 17.62
  • Tn = 243.12
绝对湿度

绝对湿度是在一定体积的干燥空气中含有的水蒸气的质量。绝对湿度的计量单位是克/立方米。以下给出了计算绝对湿度的公式:

                          (RH/100%) · A · exp(m·t/(Tn+t)
dv(t,RH) = 216.7 · --------------------------------------
                          273.15 + t

这里:

  • dv = 绝对湿度,单位是克/立方米
  • t = 当前温度,单位是摄氏度 C
  • RH = 当前相对湿度,单位是百分比 (%)
  • m = 17.62
  • Tn = 243.12 度 C
  • A = 6.112 hPa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值