Android 平台提供四種感應器,可供你監控各種環境屬性。 你可以使用這些感應器監控相對環境濕度、光線、環境壓力和 周遭環境溫度。這四種環境感應器全都是硬體式感應器 且只有在裝置製造商內建於裝置上時才可使用。除了 光源感應器,大多數裝置製造商用來控制螢幕亮度和環境 部分裝置可能無法隨時使用感應器。因此,請特別注意 在執行階段驗證是否存在環境感應器,再嘗試從 基礎架構
大多數動作感應器和位置感應器會傳回多維感應器陣列,這與大多數的動作感應器和位置感應器不同
每個 SensorEvent
的值,環境感應器都會傳回單一感應器
每個資料事件的價值例如攝氏溫度或 hPa 的壓力。
此外,動作感應器和位置感應器不同,這類感應器通常需要高通過或低傳遞
環境感應器通常不需要任何資料篩選或資料處理。表格
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 級別 14) 中淘汰。
使用光線、壓力和溫度感應器
從光源、壓力和溫度感應器取得的原始資料通常不需要
像是校正、篩選或修改,導致這些感應器成為最容易使用的感應器。目的地:
先從這些感應器擷取資料,再建立 SensorManager
類別的例項,可用於取得實體感應器的例項。
接著,請在 onResume()
方法中註冊感應器事件監聽器,並開始透過 onSensorChanged()
回呼方法處理傳入的感應器資料。
以下程式碼說明如何執行這項操作:
class SensorActivity : Activity(), SensorEventListener {
private lateinit var sensorManager: SensorManager
private var pressure: Sensor? = null
public override fun onCreate(savedInstanceState: Bundle?) {
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.
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager
pressure = sensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE)
}
override fun onAccuracyChanged(sensor: Sensor, accuracy: Int) {
// Do something here if sensor accuracy changes.
}
override fun onSensorChanged(event: SensorEvent) {
val millibarsOfPressure = event.values[0]
// Do something with this sensor data.
}
override fun onResume() {
// Register a listener for the sensor.
super.onResume()
sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL)
}
override fun onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause()
sensorManager.unregisterListener(this)
}
}
public class SensorActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;
private Sensor pressure;
@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.
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
pressure = sensorManager.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 millibarsOfPressure = event.values[0];
// Do something with this sensor data.
}
@Override
protected void onResume() {
// Register a listener for the sensor.
super.onResume();
sensorManager.registerListener(this, pressure, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Be sure to unregister the sensor when the activity pauses.
super.onPause();
sensorManager.unregisterListener(this);
}
}
您必須一律納入 onAccuracyChanged()
和 onSensorChanged()
回呼方法的實作。另外,請
請務必在活動暫停時,確實取消註冊感應器。這樣可以防止感應器
會持續感應資料並消耗電池電力
使用濕度感應器
如要取得原始相對濕度資料,請同樣使用濕度感應器
包括光線、壓力和溫度感應器不過,如果裝置同時配備濕度感應器
你可以使用這兩個資料串流 (TYPE_RELATIVE_HUMIDITY
) 和溫度感應器 (TYPE_AMBIENT_TEMPERATURE
) 來計算
露點和絕對濕度
露點
露點是指特定空氣量必須保持不變的溫度 水蒸氣壓,讓水蒸氣凝聚水。以下公式顯示 可以計算露點:
地點
- td = 以攝氏為單位的露點溫度
- t = 實際溫度,以攝氏度為單位
- 相對濕度 (百分比) = 實際相對濕度 (百分比)
- m = 17.62
- n = 243.12
絕對濕度
絕對濕度是指乾燥量中各個水蒸氣的質量。絕對時間 濕度的測量單位為公克/公尺3。以下公式顯示 可以計算絕對濕度:
地點
- dv = 絕對濕度,單位為公克/公尺3
- t = 實際溫度,以攝氏度為單位
- 相對濕度 (百分比) = 實際相對濕度 (百分比)
- m = 17.62
- n = 243.12 度 C
- A = 6.112 hPa