当前位置: 代码迷 >> Android >> Android传感器-Environment Sensor
  详细解决方案

Android传感器-Environment Sensor

热度:270   发布时间:2016-05-01 13:03:13.0
Android传感器---Environment Sensor

本文译自:http://developer.android.com/guide/topics/sensors/sensors_environment.html#sensors-using-humid

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

 .1该实现随着设备的不同而不同,在Android4.0(API Level 14)中被弃用。

使用光线、压力和温度传感器

通常,从光线、压力、和温度传感器中获取的原始数据不需要校正、过滤或修正,这使得他们成为最容易使用的传感器。首先创建一个SensorManager类的实例来获取数据,你能使用的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被挂起时注销传感器,这样会防止持续的感知数据并降低电池的消耗。

使用湿度传感器

与使用光线、压力和温度传感器的方法相同,通过使用湿度传感器,你能够获取原始的相对湿度数据。但是,如果一个设备上同时湿度传感器(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)]

其中

1. td =露点温度,单位:摄氏度;

2. t =实际温度,单位:摄氏度;

3. RH=实际的相对湿度,百分比;

4. m=17.62

5. Tn=243.12

绝对湿度

绝对湿度是给定体积的空气中水的质量。绝对湿度的测量单位是:克/立方米(grams/meter3),以下是计算绝对湿度的公式:

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

其中:

1. dv =绝对湿度,单位:克/立方米

2. t = 实际温度,单位:摄氏度

3. RH = 实际的相对湿度,百分比

4. m = 17.62

5. Tn= 243.12摄氏度

6. A = 6.112hPa

  相关解决方案