A plataforma Android oferece quatro sensores que permitem monitorar várias propriedades ambientais. Você pode usar esses sensores para monitorar a umidade, a iluminação e a pressão ambiente temperatura ambiente perto de um dispositivo Android. Todos os quatro sensores de ambiente são baseados em hardware e só estão disponíveis se o fabricante os tiver integrado ao dispositivo. Com a exceção de o sensor de luz, que a maioria dos fabricantes de dispositivos usa para controlar o brilho da tela, o ambiente nem sempre estão disponíveis nos dispositivos. Por isso, é particularmente importante que você verificar no tempo de execução se existe um sensor de ambiente antes de tentar coletar dados reimplantá-lo.
Diferente da maioria dos sensores de movimento e de posição, que retornam uma matriz multidimensional de sensores
valores para cada SensorEvent, os sensores de ambiente vão retornar um único sensor
para cada evento de dados. Por exemplo, a temperatura em °C ou a pressão em hPa.
Além disso, ao contrário dos sensores de movimento e de posição, que geralmente precisam de valores passa-altos ou passa-baixos
os sensores de ambiente normalmente não exigem filtragem ou processamento de dados. Tabela
1 fornece um resumo dos sensores de ambiente com suporte na plataforma Android.
Tabela 1. Sensores de ambiente compatíveis com a plataforma Android.
| Sensor | Dados de eventos do sensor | Unidades de medida | Descrição dos dados |
|---|---|---|---|
TYPE_AMBIENT_TEMPERATURE |
event.values[0] |
°C | Temperatura do ar ambiente. |
TYPE_LIGHT |
event.values[0] |
lx | Iluminamento. |
TYPE_PRESSURE |
event.values[0] |
hPa ou mbar | Pressão do ar ambiente. |
TYPE_RELATIVE_HUMIDITY |
event.values[0] |
% | Umidade relativa ambiente. |
TYPE_TEMPERATURE |
event.values[0] |
°C | Temperatura do dispositivo.1 |
1 As implementações variam de acordo com o dispositivo dispositivo. Esse sensor teve o uso suspenso no Android 4.0 (API nível 14).
Usar os sensores de luz, pressão e temperatura
Os dados brutos que você adquire dos sensores de luz, pressão e temperatura geralmente não exigem
calibração, filtragem ou modificação, o que os torna alguns dos sensores mais fáceis de usar. Para
Para coletar dados desses sensores, primeiro crie uma instância da classe SensorManager, que pode ser usada para acessar uma instância de um sensor físico.
Em seguida, registre um listener de sensor no método onResume() e comece a processar os dados recebidos no método de callback onSensorChanged(). A
o código a seguir mostra como fazer isso:
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); } }
É preciso sempre incluir implementações dos métodos de callback onAccuracyChanged() e onSensorChanged(). Além disso, tenha
cancele o registro de um sensor quando uma atividade for pausada. Isso evita que um sensor
detectar dados continuamente e descarregar a bateria.
Usar o sensor de umidade
É possível coletar dados brutos de umidade relativa com o sensor de umidade da mesma forma que você usa
os sensores de luz, pressão e temperatura. No entanto, se o dispositivo tiver um sensor de umidade
(TYPE_RELATIVE_HUMIDITY) e um sensor de temperatura (TYPE_AMBIENT_TEMPERATURE), você pode usar esses dois fluxos de dados para calcular
o ponto de condensação e a umidade absoluta.
Ponto de condensação
O ponto de condensação é a temperatura em que um determinado volume de ar precisa ser resfriado, a constante pressão barométrica, para que o vapor de água se condense na água. A equação a seguir mostra como você para calcular o ponto de condensação:
Em que:
- td = temperatura do ponto de condensação em graus C
- t = temperatura real em graus C
- UR = umidade relativa real em porcentagem (%)
- m = 17,62
- Tn = 243,12
Umidade absoluta
A umidade absoluta é a massa de vapor de água em um determinado volume de ar seco. Absoluta a umidade é medida em gramas/metro3. A equação a seguir mostra como você pode calcular a umidade absoluta:
Em que:
- dv = umidade absoluta em gramas/metro3
- t = temperatura real em graus C
- UR = umidade relativa real em porcentagem (%)
- m = 17,62
- Tn = 243,12 graus C
- A = 6,112 hPa