概述:
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