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()
回呼方法處理傳入的感應器資料。
以下程式碼說明如何執行這項操作:
Kotlin
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) } }
Java
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