環境センサー

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() コールバック メソッドで開始します。「 次のコードは、その方法を示しています。

KotlinJava
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)を使用すると、この 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 ヘクトパスカル

関連ドキュメント