A plataforma Android oferece quatro sensores que permitem monitorar várias propriedades ambientais. Use esses sensores para monitorar a umidade relativa, iluminamento, pressão e temperatura do ambiente perto de um dispositivo com tecnologia Android. Os quatro sensores de ambiente são baseados em hardware e estarão disponíveis apenas se o fabricante os tiver incorporado em um dispositivo. Com exceção do sensor de luz, que a maioria dos fabricantes usa para controlar o brilho da tela, os sensores de ambiente nem sempre estão disponíveis nos dispositivos. Por isso, é particularmente importante verificar durante a execução se um sensor de ambiente existe antes de tentar acessar os dados dele.
Ao contrário da maioria dos sensores de movimento e de posição, que retorna uma matriz multidimensional de valores de sensor para cada SensorEvent
, os sensores de ambiente retornam um único valor 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 filtragem passa-alta ou passa-baixa, os sensores de ambiente normalmente não precisam de filtragem ou processamento de dados. A Tabela 1 mostra um resumo dos sensores de ambiente compatíveis com a 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. 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 coletados dos sensores de luz, pressão e temperatura geralmente não requerem calibração, filtragem ou modificação. Por isso, esses sensores estão entre os mais fáceis de usar. Para coletar esses dados, crie primeiro uma instância da classe SensorManager
, que pode ser usada para conseguir 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()
. Este código 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, sempre cancele o registro de um sensor quando uma atividade for pausada. Isso evite que o sensor detecte dados continuamente e esgote a bateria.
Usar o sensor de umidade
Colete 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 um dispositivo tiver um sensor de umidade (TYPE_RELATIVE_HUMIDITY
) e um sensor de temperatura (TYPE_AMBIENT_TEMPERATURE
), você poderá 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 é resfriado sob pressão barométrica constante para que o vapor de água se condense. A equação a seguir mostra como calcular o ponto de condensação:
![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=1&hl=pt-br)
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. A umidade absoluta é medida em gramas/metro3. A equação a seguir mostra como 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