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:
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)
}
}
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:
![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?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. 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