本文譯自: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