Статьи

Android Sensor Tutorial: Датчик барометра

Одна из самых интересных тем на мой взгляд, это как использовать Sensor в Android . В настоящее время наш смартфон полон датчиков, и мы можем использовать его для управления нашим приложением. Наиболее распространенные датчики:

  • GPS
  • Датчик приближения
  • Световой датчик
  • Датчик температуры
  • Датчик барометра
  • NFC

просто упомянуть некоторые из них. В этом посте мы объясним, как получить список датчиков и как мы можем использовать один из них (например, датчик барометра ). Мы хотим создать приложение, которое показывает текущее давление:

android_barometer_sensor [9]

Использование датчика в Android

Когда мы разрабатываем приложение для Android и нам нужен определенный датчик, чтобы наше приложение могло работать, у нас есть два разных варианта:

  • Укажите это датчик в AndroidManifest.xml
  • Определите список датчиков и проверьте, доступен ли тот, который нам интересен

Если мы укажем это в AndroidManifest.xml, нам просто нужно добавить эту строку:

Функция [9]

и как только мы выбрали « Пользовательскую функцию» , мы имеем:

android_feature_1 [4]

Мы также можем получить список датчиков, и нам нужно немного кода.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 
 // Get the reference to the sensor manager
 sensorManager = (SensorManager) getSystemService(Service.SENSOR_SERVICE);
 
 // Get the list of sensor
 List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_ALL);
 
 List<Map<String, String>> sensorData = new ArrayList<Map<String,String>>();
 
 for (Sensor sensor: sensorList) {
     Map<String, String> data = new HashMap<String, String>();
     data.put("name", sensor.getName());
     data.put("vendor", sensor.getVendor());
     sensorData.add(data);
 }
}

В строке 7 мы получаем ссылку на SensorManager, используемый для обработки датчика, затем в строке 10 мы получаем список датчиков. В этом случае мы хотим, чтобы все датчики присутствовали в нашем смартфоне, поэтому мы используем Sensor.TYPE_ALL. Если мы хотим всего один раз, мы можем отфильтровать список по типу искомого датчика. Например, если мы хотим иметь весь датчик барометра, мы можем использовать:

1
List<Sensor> sensorList = sensorManager.getSensorList(Sensor.TYPE_PRESSURE);

Как только у нас есть список, мы можем просто показать его, используя ListView и SimpleAdapter. Результат (в моем смартфоне)

android_sensor_list [4]

Что сейчас? Мы можем получить некоторую информацию из класса Sensor, например, разрешение датчика поставщика, минимальный и максимальный диапазон. Вы должны иметь в виду, что диапазон датчиков может различаться для разных датчиков. Получив список, мы можем проверить, поддерживает ли смартфон наш датчик. Теперь у нас есть наши датчики, мы хотим получать от них информацию.

Сенсорные события

Для получения информации от датчика есть простой способ: зарегистрировать слушателя. Сначала мы должны выбрать интересующий нас датчик, а затем зарегистрировать нашего слушателя. В нашем случае нас интересует датчик барометра, поэтому имеем:

1
2
3
4
// Look for barometer sensor
SensorManager snsMgr = (SensorManager) getSystemService(Service.SENSOR_SERVICE);
Sensor pS = snsMgr.getDefaultSensor(Sensor.TYPE_PRESSURE);
snsMgr.registerListener(this, pS, SensorManager.SENSOR_DELAY_UI);

В строке 4 мы регистрируем нашего слушателя. Обратите внимание, что последний параметр показывает, как быстро мы хотим получать уведомления при изменении значения, измеренного датчиком. Существует несколько значений, но обратите внимание, что слишком высокая частота уведомлений может иметь некоторые побочные эффекты для ваших приложений. Чтобы зарегистрировать класс в качестве слушателя, мы просто реализуем интерфейс SensorEventListener, например:

01
02
03
04
05
06
07
08
09
10
11
public class PressActivity extends Activity implements SensorEventListener {
    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
    }
 
    @Override
    public void onSensorChanged(SensorEvent event) {
        float[] values = event.values;
        pressView.setText("" + values[0]);
    }
}

В строке 3 мы переопределяем метод, который вызывается при изменении точности. Этот параметр представляет уровень достоверности значения, которое мы получаем от датчика. Другой метод (более интересный) — onSensorChanged, который вызывается при изменении значения. В этом случае мы просто получаем первое значение и показываем его в TextVIew. Результат показан ниже:

android_barometer_sensor [4]

Например, типичное приложение может показать тенденцию давления, чтобы знать, будет ли солнце стесняться или у нас будут облака.

Исходный код скоро будет доступен.

Ссылка: Android Sensor Tutorial: Датчик барометра от нашего партнера JCG Франческо Аццолы в блоге Surviving с Android .