環境センサー

Android プラットフォームには 4 つのセンサーが用意されており、さまざまな環境特性をモニタリングできます。 これらのセンサーを使用して、周囲の相対湿度、照度、周囲の気圧、 周囲の温度に照らして Android 搭載デバイスの近くにあります。4 つの環境センサーはすべてハードウェアベース デバイスに組み込まれている場合にのみ使用できます。ただし、 光センサーは、ほとんどのデバイス メーカーが画面の明るさ、環境、 デバイスでセンサーを利用できない場合があります。このため、データ アナリストが 環境センサーの存在を実行時に検証してから、 できます。

センサーの多次元配列を返すほとんどのモーション センサーや位置センサーとは異なり、 SensorEvent ごとの値の場合、環境センサーは 1 つのセンサーを返します。 値として使用されます。たとえば、温度(°C)や圧力(hPa)などです。 また、モーション センサーや位置センサーは、多くの場合ハイパス / ローパス 環境センサーは、通常、データのフィルタリングやデータ処理を必要としません。テーブル に、Android プラットフォームでサポートされている環境センサーの概要を示します。

表 1. Android プラットフォームでサポートされている環境センサー

センサー センサー イベント データ 測定単位 データの説明
TYPE_AMBIENT_TEMPERATURE event.values[0] 周囲の気温。
TYPE_LIGHT event.values[0] ルクス 照度。
TYPE_PRESSURE event.values[0] ヘクトパスカルまたはミリバール 周囲の気圧。
TYPE_RELATIVE_HUMIDITY event.values[0] % 周囲の相対湿度。
TYPE_TEMPERATURE event.values[0] デバイスの温度。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)を使用すると、この 2 つのデータ ストリームを使って計算できます。 絶対湿度で決まります

露点温度

露点温度とは、一定量の空気を冷却しなければならない温度です 気圧、水蒸気が水に凝結するためです。次の式は、 露点温度を計算するには:

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

ここで、

  • td = 露点温度(℃)
  • t = 実際の気温(℃)
  • RH = 実際の相対湿度(%)
  • m = 17.62
  • Tn = 243.12

絶対湿度

絶対湿度とは、一定量の乾燥空気中に含まれる水蒸気の質量で、絶対的 湿度はグラム/メートル3で測定されます。次の式は、 次のように絶対湿度を計算できます。

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

ここで、

  • dv = 絶対湿度(g/m3
  • t = 実際の気温(℃)
  • RH = 実際の相対湿度(%)
  • m = 17.62
  • Tn = 243.12℃
  • A = 6.112 ヘクトパスカル

関連ドキュメント