Android 傳感器 IV-環境傳感器

概述:

Android平臺提供了四種傳感器讓我們可以監測各種環境屬性. 可以使用這些傳感器來監測設備附近的相對環境溼度, 亮度, 環境壓力和環境溫度. 這四個環境傳感器都是基於硬件的, 只有設備商提供了這些傳感器, 才能使用. 唯一例外的是亮度傳感器, 它是大多數設備用來控制屏幕亮度的傳感器, 環境傳感器不總是在設備上可用的. 正因爲如此, 使用它們之前在運行時檢測傳感器是否存在於設備上是十分重要的.

不像大多數運動傳感器和位置傳感器, 它們返回多維數組作爲結果, 環境傳感器的每個數據事件返回的都是單一的值. 此外, 不像運動傳感器和位置傳感器, 它們經常需要high-pass或者low-pass過濾器, 環境傳感器通常不需要任何數據過濾器和數據處理(它們實在是太簡單了. ..). 下表總結了Android平臺可以支持的各種環境傳感器:

傳感器

傳感器事件數據

描述

單位

TYPE_AMBIENT_TEMPERATURE

event.values[0]

環境空氣溫度

攝氏度

TYPE_LIGHT

event.values[0]

亮度

Lx

TYPE_PRESSURE

event.values[0]

環境空氣壓力

hPa或者mPa

TYPE_RELATIVE_HUMIDITY

event.values[0]

環境相對溼度

%

TYPE_TEMPERATURE

event.values[0]

設備溫度

攝氏度

設備溫度在不同的設備間實現不一樣. 該傳感器在Android4.0中不再推薦使用.

使用亮度, 壓力, 和溫度傳感器:

從亮度, 壓力和溫度傳感器獲得的原始數據通常不需要校正, 過濾或者更改. 要獲取這些傳感器的原始數據, 首先要創建一個SensorManager類的實例, 它可以用來獲取物理傳感器實例. 然後我們可以在onResume()方法中註冊一個傳感器監聽器, 然後在onSensorChanged回調方法中處理傳進來的傳感器數據. 栗子:

public class SensorActivity extends Activity implements SensorEventListener {
  private SensorManager mSensorManager;
  private Sensor mPressure;

  @Override
  public final void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Get aninstance of the sensor service, and use that to get an instance of
    // a particularsensor.
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mPressure = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
  }

  @Override
  public final void onAccuracyChanged(Sensor sensor, int accuracy) {
    // Do somethinghere if sensor accuracy changes.
  }

  @Override
  public final void onSensorChanged(SensorEvent event) {
    float millibars_of_pressure = event.values[0];
    // Do somethingwith this sensor data.
  }

  @Override
  protected void onResume() {
    // Register alistener for the sensor.
    super.onResume();
    mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL);
  }

  @Override
  protected void onPause() {
    // Be sure tounregister the sensor when the activity pauses.
    super.onPause();
    mSensorManager.unregisterListener(this);
  }
}

我們必須總是包含onAccuracyChanged()和onSensorChanged()回調方法的實現. 此外, 要確保在onPause()方法中註銷監聽器. 這可以防止傳感器持續的消耗電量.

使用溼度傳感器:

我們可以使用溼度傳感器來獲取相對溼度的原始數據, 用法跟亮度, 壓力和溫度傳感器一樣. 但是如果一個設備既有溼度傳感器(TYPE_RELATIVE_HUMIDITY)和一個溫度傳感器(TYPE_AMBIENT_TEMPERATURE),我們可以使用這兩個數據流來計算dew point和絕對溼度.

 

參考: https://developer.android.com/guide/topics/sensors/sensors_environment.html

發佈了81 篇原創文章 · 獲贊 4 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章