Sensoren

HAL-Symbol für Android-Sensoren

Android-Sensoren geben Anwendungen Zugriff auf die zugrunde liegenden physischen Sensoren eines Mobilgeräts. Sie sind datenbereitstellende virtuelle Geräte, die von sensors.h , dem Hardware Abstraction Layer (HAL) des Sensors, definiert werden.

Was sind Android-Sensoren?

Android-Sensoren sind virtuelle Geräte, die Daten von einer Reihe physischer Sensoren liefern: Beschleunigungsmesser, Gyroskope, Magnetometer, Barometer, Feuchtigkeits-, Druck-, Licht-, Näherungs- und Herzfrequenzsensoren.

Nicht in der Liste der physischen Geräte enthalten, die Daten bereitstellen, sind Kamera, Fingerabdrucksensor, Mikrofon und Touchscreen. Diese Geräte haben ihren eigenen Meldemechanismus; Die Trennung ist willkürlich, aber im Allgemeinen liefern Android-Sensoren Daten mit geringerer Bandbreite. Beispiel: „100 Hz x 3 Kanäle“ für einen Beschleunigungssensor im Vergleich zu „25 Hz x 8 MP x 3 Kanäle“ für eine Kamera oder „44 kHz x 1 Kanal“ für ein Mikrofon.

Android definiert nicht, wie die verschiedenen physischen Sensoren mit dem System-on-Chip (SoC) verbunden sind.

  • Oft sind Sensorchips über einen Sensor-Hub mit dem SoC verbunden, was eine Überwachung und Verarbeitung der Daten mit geringem Stromverbrauch ermöglicht.
  • Als Transportmechanismus wird häufig Inter-Integrated Circuit (I2C) oder Serial Peripheral Interface (SPI) verwendet.
  • Um den Stromverbrauch zu reduzieren, sind einige Architekturen hierarchisch, wobei einige minimale Verarbeitung in der anwendungsspezifischen integrierten Schaltung (ASIC - wie Bewegungserkennung auf dem Beschleunigungsmesser-Chip) erfolgt und mehr in einem Mikrocontroller (wie Schritterkennung in einem Sensor-Hub). ).
  • Es ist Sache des Geräteherstellers, eine Architektur basierend auf den Merkmalen Genauigkeit, Leistung, Preis und Gehäusegröße zu wählen. Weitere Informationen finden Sie unter Sensorstapel .
  • Batching-Fähigkeiten sind ein wichtiger Aspekt für die Leistungsoptimierung. Weitere Informationen finden Sie unter Stapelverarbeitung .

Jeder Android-Sensor hat einen „Typ“, der darstellt, wie sich der Sensor verhält und welche Daten er liefert.

  • Die offiziellen Android- Sensortypen sind in sensors.h unter den Namen SENSOR_TYPE_… definiert.
    • Die überwiegende Mehrheit der Sensoren hat einen offiziellen Sensortyp.
    • Diese Typen sind im Android SDK dokumentiert.
    • Das Verhalten von Sensoren mit diesen Typen wird in der Android Compatibility Test Suite (CTS) getestet.
  • Wenn ein Hersteller einen neuartigen Sensor auf einem Android-Gerät integriert, kann der Hersteller einen eigenen temporären Typ definieren, um darauf zu verweisen.
    • Diese Typen sind nicht dokumentiert, daher werden Anwendungsentwickler sie wahrscheinlich nicht verwenden, entweder weil sie nichts über sie wissen oder weil sie wissen, dass sie selten vorhanden sind (nur auf einigen Geräten dieses bestimmten Herstellers).
    • Sie werden nicht von CTS getestet.
    • Sobald Android einen offiziellen Sensortyp für diese Art von Sensor definiert, müssen die Hersteller aufhören, ihren eigenen temporären Typ zu verwenden, und stattdessen den offiziellen Typ verwenden. Auf diese Weise wird der Sensor von mehr Anwendungsentwicklern verwendet.
  • Die Liste aller auf dem Gerät vorhandenen Sensoren wird von der HAL-Implementierung gemeldet.
    • Es können mehrere Sensoren des gleichen Typs vorhanden sein. Zum Beispiel zwei Näherungssensoren oder zwei Beschleunigungsmesser.
    • Die überwiegende Mehrheit der Anwendungen erfordert nur einen einzigen Sensor eines bestimmten Typs. Beispielsweise erhält eine Anwendung, die den Standardbeschleunigungsmesser anfordert, den ersten Beschleunigungsmesser in der Liste.
    • Sensoren werden oft durch Weck- und Nicht-Weck- Paare definiert, wobei beide Sensoren denselben Typ haben, sich aber durch ihre Weckcharakteristik unterscheiden.

Android-Sensoren liefern Daten als eine Reihe von Sensorereignissen.

Jede Veranstaltung enthält:

  • ein Handle auf den Sensor, der es erzeugt hat
  • der Zeitstempel, zu dem das Ereignis erkannt oder gemessen wurde, basierend auf SystemClock.elapsedRealtimeNanos()
  • und einige Daten

Die Interpretation der gemeldeten Daten hängt vom Sensortyp ab. Einzelheiten dazu, welche Daten für jeden Sensortyp gemeldet werden, finden Sie in den Sensortypdefinitionen.

Vorhandene Dokumentation

An Entwickler gerichtet

An Hersteller gerichtet