Android предоставляет методы, с помощью которых можно узнать различные свойства окружающей среды за счет датчиков, встроенных в устройство. Так, вы можете узнать:
-температуру окружающей среды-освещенность
-давление
-относительную влажность воздуха
-температуру устройства(к сожалению, реализация этого датчика сильно отличается по точности у разных устройств, поэтому используйте его только на свой страх и риск)
Датчик, который вы собираетесь использовать в коде, обязательно должен поддерживаться аппаратно. К сожалению, за исключением датчика освещенности, достаточно наивно рассчитывать на обязательное присутствие используемого вами датчика на конкретном устройстве пользователя. Поэтому очень важно правильно обрабатывать исключительные ситуации.
Это перевод этой статьи
В отличие от акселерометра, вышеперечисленные датчики возвращают всего одно значение параметра внешней среды — например, температуру в градусах Цельсия или давление в гектопаскалях (это примерно 1/1000 часть атмосферы).
Датчики параметров внешней среды в Android:
| Sensor | Sensor event data | Units of measure | Data description |
|---|---|---|---|
TYPE_AMBIENT_TEMPERATURE | event.values[0] | °C | Температура окр. среды |
TYPE_LIGHT | event.values[0] | люксы | Освещенность |
TYPE_PRESSURE | event.values[0] | hPa (= mbar) | Атмосферное давление |
TYPE_RELATIVE_HUMIDITY | event.values[0] | % | Относительная влажность воздуха |
TYPE_TEMPERATURE | event.values[0] | °C | Температура устройста |
Использование датчиков температуры, освещенности и давления
Чтобы получить данные о состоянии окружающей среды, сначала нужно создать объект класса SensorManager, с помощью которого можно получит экземпляр класса конкретного датчика. Потом нужно зарегестировать listener в 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);
// Берем эксемпляр класса SensorManager, и получаем из него экзепляр класса датчика давления
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mPressure = mSensorManager.getDefaultSensor(Sensor.TYPE_PRESSURE);
}
@Override
public final void onAccuracyChanged(Sensor sensor, int accuracy) {
// Если точность датчика изменилась
}
@Override
public final void onSensorChanged(SensorEvent event) {
float millibars_of_pressure = event.values[0];
// Сделать что-то с полученными данными()
}
@Override
protected void onResume() {
// Регистрируем listener
super.onResume();
mSensorManager.registerListener(this, mPressure, SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
// Приостановить считывание данных, чтобы датчик не использовал заряд батареи
super.onPause();
mSensorManager.unregisterListener(this);
}
}
Использование датчика влажности воздуха
Использование датчика влажности воздуха аналогично использованию предыдущих. Кроме того, если устройство поддерживает датчик внешней температуры и влажности воздуха, можно легко вычислить точку росы и абсолютную влажность воздуха.
Точка росы
Точка росы — такая температура воздуха, при которой водяной пар становится насыщеным и конденсирует в воду. Она рассчитывается по формуле:[ln(RH/100%) + m·t/(Tn+t) ] * Tn · ------------------------------------ m - [ln(RH/100%) + m·t/(Tn+t)]
Где:
- t = температура воздуха, C
- RH = относительная влажность воздуха (%)
- m = 17.62
- Tn = 243.12
Абсолютная влажность воздуха
Абсолютная влажность воздуха — масса водяного пара в заданном объеме воздуха измеряется в grams/meter3. Формула для расчета:[(RH/100%) · A · exp(m·t/(Tn+t) ]* 216.7 ------------------------------------ 273.15 + t
Где:
- dv = абсолютная влажность воздуха в grams/meter3
- t = температура, C
- RH = относительная влажность воздуха (%)
- m = 17.62
- Tn = 243.12 C
- A = 6.112 hPa
Комментариев нет:
Отправить комментарий