環境感應器

Android 平台提供四種感應器,可供你監控各種環境屬性。 你可以使用這些感應器監控相對環境濕度、光線、環境壓力和 周遭環境溫度。這四種環境感應器全都是硬體式感應器 且只有在裝置製造商內建於裝置上時才可使用。除了 光源感應器,大多數裝置製造商用來控制螢幕亮度和環境 部分裝置可能無法隨時使用感應器。因此,請特別注意 在執行階段驗證是否存在環境感應器,再嘗試從 基礎架構

大多數動作感應器和位置感應器會傳回多維感應器陣列,這與大多數的動作感應器和位置感應器不同 每個 SensorEvent 的值,環境感應器都會傳回單一感應器 每個資料事件的價值例如攝氏溫度或 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 級別 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) 來計算 露點和絕對濕度

露點

露點是指特定空氣量必須保持不變的溫度 水蒸氣壓,讓水蒸氣凝聚水。以下公式顯示 可以計算露點:

t_d(t,RH) = Tn · (ln(RH/100) + m·t/(T_n+t)
))/(m - [ln(RH/100%) + m·t/(T_n+t)])

地點

  • td = 以攝氏為單位的露點溫度
  • t = 實際溫度,以攝氏度為單位
  • 相對濕度 (百分比) = 實際相對濕度 (百分比)
  • m = 17.62
  • n = 243.12

絕對濕度

絕對濕度是指乾燥量中各個水蒸氣的質量。絕對時間 濕度的測量單位為公克/公尺3。以下公式顯示 可以計算絕對濕度:

d_v(t,RH) =  (RH/100) · A · exp(m·
t/(T_n+t)/(273.15 + t)

地點

  • dv = 絕對濕度,單位為公克/公尺3
  • t = 實際溫度,以攝氏度為單位
  • 相對濕度 (百分比) = 實際相對濕度 (百分比)
  • m = 17.62
  • n = 243.12 度 C
  • A = 6.112 hPa

另請參閱