Czujniki

Ikona HAL czujników Androida

Czujniki systemu Android zapewniają aplikacjom dostęp do fizycznych czujników urządzenia mobilnego. Są to wirtualne urządzenia dostarczające dane zdefiniowane przez sensors.h , warstwę abstrakcji sprzętu (HAL) sensora.

Czym są czujniki Androida?

Czujniki Androida to wirtualne urządzenia, które dostarczają dane pochodzące z zestawu fizycznych czujników: akcelerometrów, żyroskopów, magnetometrów, barometru, wilgotności, ciśnienia, światła, czujników zbliżeniowych i tętna.

Na liście fizycznych urządzeń dostarczających dane nie ma kamery, czujnika odcisków palców, mikrofonu i ekranu dotykowego. Urządzenia te mają własny mechanizm raportowania; separacja jest arbitralna, ale ogólnie czujniki Androida zapewniają dane o niższej przepustowości. Na przykład „kanały 100 Hz x 3” w przypadku akcelerometru w porównaniu z „kanałami 25 Hz x 8 MP x 3” w przypadku kamery lub „kanał 44 kHz x 1” w przypadku mikrofonu.

Android nie definiuje, w jaki sposób różne fizyczne czujniki są podłączone do systemu na chipie (SoC).

  • Często chipy czujników są połączone z SoC przez koncentrator czujników , co umożliwia monitorowanie i przetwarzanie danych przy niskim poborze mocy.
  • Często jako mechanizm transportu używany jest układ scalony (I2C) lub szeregowy interfejs peryferyjny (SPI).
  • Aby zmniejszyć zużycie energii, niektóre architektury są hierarchiczne, z minimalnym przetwarzaniem wykonywanym w układzie scalonym specyficznym dla aplikacji (ASIC - jak wykrywanie ruchu na chipie akcelerometru), a więcej robi się w mikrokontrolerze (jak wykrywanie kroków w koncentratorze czujników ).
  • Do producenta urządzenia należy wybór architektury w oparciu o charakterystykę dokładności, mocy, ceny i wielkości opakowania. Zobacz Stos czujników, aby uzyskać więcej informacji.
  • Możliwości wsadowe są ważnym czynnikiem optymalizacji mocy. Aby uzyskać więcej informacji, zobacz Tworzenie partii .

Każdy czujnik Androida ma „typ” przedstawiający zachowanie czujnika i dostarczanych przez niego danych.

  • Oficjalne typy czujników Androida są zdefiniowane w sensorach.h pod nazwami SENSOR_TYPE_…
    • Zdecydowana większość czujników ma oficjalny typ czujnika.
    • Te typy są udokumentowane w Android SDK.
    • Zachowanie czujników z tymi typami jest testowane w pakiecie Android Compatibility Test Suite (CTS).
  • Jeśli producent integruje nowy rodzaj czujnika na urządzeniu z systemem Android, może zdefiniować własny tymczasowy typ, aby się do niego odnieść.
    • Te typy są nieudokumentowane, więc twórcy aplikacji raczej nie będą z nich korzystać, ponieważ albo o nich nie wiedzą, albo wiedzą, że są rzadko obecne (tylko na niektórych urządzeniach tego konkretnego producenta).
    • Nie są testowane przez CTS.
    • Gdy Android zdefiniuje oficjalny typ czujnika dla tego rodzaju czujnika, producenci muszą przestać używać własnego tymczasowego typu i zamiast tego użyć oficjalnego typu. W ten sposób czujnik będzie używany przez większą liczbę twórców aplikacji.
  • Lista wszystkich czujników obecnych na urządzeniu jest raportowana przez implementację HAL.
    • Może być kilka czujników tego samego typu. Na przykład dwa czujniki zbliżeniowe lub dwa akcelerometry.
    • Zdecydowana większość aplikacji wymaga tylko jednego czujnika danego typu. Na przykład aplikacja żądająca domyślnego akcelerometru otrzyma pierwszy akcelerometr na liście.
    • Czujniki są często definiowane przez pary budzenia i nie budzenia , oba czujniki mają ten sam typ, ale różnią się charakterystyką budzenia.

Czujniki systemu Android dostarczają dane w postaci serii zdarzeń czujnika.

Każde wydarzenie zawiera:

  • uchwyt do czujnika, który go wygenerował
  • znacznik czasu, w którym zdarzenie zostało wykryte lub zmierzone, na podstawie SystemClock.elapsedRealtimeNanos()
  • i trochę danych

Interpretacja raportowanych danych zależy od typu czujnika. Zobacz definicje typów czujników, aby uzyskać szczegółowe informacje o tym, jakie dane są raportowane dla każdego typu czujnika.

Istniejąca dokumentacja

Skierowane do programistów

Skierowane do producentów