Platforma Android ma 4 czujniki, które umożliwiają monitorowanie różnych właściwości środowiskowych. Możesz używać tych czujników do monitorowania względnej wilgotności otoczenia, oświetlenia, ciśnienia otoczenia i temperatury otoczenia w pobliżu urządzenia z Androidem. Wszystkie 4 czujniki środowiskowe są sprzętowe i są dostępne tylko wtedy, gdy producent urządzenia je wbudowany w urządzenie. Z wyjątkiem czujnik światła, którego większość producentów urządzeń używa do sterowania jasnością ekranu i otoczenia Czujniki nie zawsze są dostępne na urządzeniach. Z tego powodu szczególnie ważne jest Sprawdź w czasie działania, czy istnieje czujnik środowiska, zanim spróbujesz pozyskać dane z: .
W przeciwieństwie do większości czujników ruchu i pozycji, które zwracają wielowymiarowy macierz
wartości dla każdej wartości SensorEvent
, czujniki środowiskowe zwracają 1 czujnik
dla każdego zdarzenia danych. Może to być na przykład temperatura w °C lub ciśnienie w hPa.
Poza tym w przeciwieństwie do czujników ruchu i pozycji, które często wymagają stosowania ruchów górnych lub dolnoprzepustowych
czujniki środowiskowe zwykle nie wymagają filtrowania ani przetwarzania danych. Stół
1 zawiera podsumowanie czujników środowiskowych, które są obsługiwane przez platformę Android.
Tabela 1. Czujniki środowiskowe obsługiwane przez platformę Android.
Czujnik | Dane zdarzenia z czujnika | Jednostki miary | Opis danych |
---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Temperatura otoczenia. |
TYPE_LIGHT |
event.values[0] |
lx | Iluminancja. |
TYPE_PRESSURE |
event.values[0] |
hPa lub mbar | Ciśnienie powietrza w pomieszczeniu. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Wilgotność względna w otoczeniu. |
TYPE_TEMPERATURE |
event.values[0] |
°C | Temperatura urządzenia1. |
1 Implementacje różnią się w zależności od urządzenia urządzenia. Ten czujnik został wycofany w Androidzie 4.0 (poziom API 14).
Używaj czujników światła, ciśnienia i temperatury
Nieprzetworzone dane zbierane z czujników światła, ciśnienia i temperatury zwykle nie wymagają
kalibracji, filtrowania i modyfikacji, co sprawia, że są to jedne z najprostszych w użyciu czujników. Do
pozyskiwania danych z tych czujników tworzysz najpierw instancję klasy SensorManager
, której możesz użyć do uzyskania instancji czujnika fizycznego.
Następnie zarejestrujesz odbiornik czujnika w metodzie onResume()
i zaczniesz obsługiwać przychodzące dane z czujnika w metodzie wywołania zwrotnego onSensorChanged()
.
Ten kod pokazuje, jak to zrobić:
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); } }
Zawsze musisz zawsze uwzględniać implementacje metod wywołania zwrotnego onAccuracyChanged()
i onSensorChanged()
. Oprócz tego:
aby zawsze wyrejestrować czujnik, gdy aktywność jest wstrzymana. Uniemożliwia to czujnikowi
nieustannie wykrywa dane i szybko rozładowuje baterię.
Korzystanie z czujnika wilgotności
Nieprzetworzone dane wilgotności względnej możesz uzyskać, używając czujnika wilgotności w taki sam sposób, w jaki korzystasz
czujniki światła, ciśnienia i temperatury. Jeśli jednak urządzenie ma oba czujniki wilgotności,
(TYPE_RELATIVE_HUMIDITY
) i czujnika temperatury (TYPE_AMBIENT_TEMPERATURE
) możesz wykorzystać te 2 strumienie danych do obliczenia
punktu rosy i wilgotności bezwzględnej.
Punkt rosy
Temperatura punktu rosy to temperatura, w której należy schłodzić określoną ilość powietrza na stałym poziomie ciśnienia barometryczne, aby para wodna spadła w wodę. Poniższe równanie pokazuje, może obliczyć punkt rosy:
![t_d(t;RH) = Tn · (ln(RH/100) + m·t/(T_n+t)
))/(m - [ln(RH/100%) + m·t/(T_n+t)])](https://developer.android.google.cn/static/images/guide/topics/sensors/dew_point.png?authuser=8&hl=pl)
Gdzie,
- td = temperatura punktu rosy w stopniach C
- t = rzeczywista temperatura w stopniach C
- RH = rzeczywista wilgotność względna w procentach (%)
- m = 17,62
- Tn = 243,12
Wilgotność bezwzględna
Wilgotność bezwzględna to masa pary wodnej w danej objętości suchego powietrza. Bezwzględna wilgotność jest mierzona w gramach/metr3. Poniższe równanie pokazuje, może obliczać wilgotność bezwzględną:
![d_v(t;RH) = (RH/100) · A · exp(m·
t/(T_n+t)/(273,15 + t)](https://developer.android.google.cn/static/images/guide/topics/sensors/absolute_humidity.png?authuser=8&hl=pl)
Gdzie,
- dv = wilgotność bezwzględna w gramach/metrze3
- t = rzeczywista temperatura w stopniach C
- RH = rzeczywista wilgotność względna w procentach (%)
- m = 17,62
- N = 243,12 stopnia C
- A = 6,112 hPa