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
Комментариев нет:
Отправить комментарий