Sensoren in Android Smartphones & Tablets
Von Olivia Wais am 21.05.2018
Sensoren in Smartphones fügen umfangreiche Standort- und Bewegungsfunktionen zu deiner Applikation hinzu, wie z.B. GPS, Netzwerkstandort, Beschleunigungsmesser, Gyroskop, Temperatur und Barometer.
Auf die folgenden Sensoren möchte ich hier näher eingehen:
- Bewegungssensoren messen Beschleunigungskräfte und Drehkräfte an 3 Achsen. In diesem Kapitel werden Beschleunigungssensoren, Schwerkraftsensoren, Gyroskope und Rotationsvektorsensoren diskutiert.
- Positionssensoren messen die physikalische Position eines Gerätes. In diesem Kapitel werden Orientierungssensoren und Magnetometer beschrieben.
- Umgebungssensoren messen Umgebungsparameter wie z.B. Temperatur, Luftdruck, Beleuchtung und Luftfeuchtigkeit. Dieses Kapitel beschreibt den Barometer, Photometer und das Thermometer.
Man kann auf die Sensoren auf dem Gerät zugreifen – wenn sie verfügbar sind – mithilfe des Android Sensor Frameworks. Das Framework bietet Klassen und Interfaces um die verschiedensten Aufgaben zu lösen wie z.B.:
- Um herauszufinden welche Sensoren überhaupt auf dem Gerät verfügbar sind.
- Um die Fähigkeiten eines Sensors zu ermitteln wie z.B. die maximale Reichweite, Hersteller und Auflösung.
- Um rohe Sensordaten zu erfassen und z.B. Mindestgeschwindigkeiten definieren, die die Sensordaten erhalten.
- Anmeldung und Abmeldung von Sensor Event Listeners welche die Änderungen aufnehmen.
Einführung
Mit dem Android-Sensor-Framework kann man auf viele Arten von Sensoren zugreifen. Einige dieser Sensoren sind hardwarebasiert, andere softwarebasiert. Hardwarebasierte Sensoren sind physische Komponenten, die in ein Mobilteil oder Tablet-Gerät integriert sind. Sie leiten ihre Daten ab, indem sie spezifische Umwelteigenschaften wie Beschleunigung, Erdmagnetfeldstärke oder Winkeländerung direkt messen. Softwarebasierte Sensoren sind keine physischen Geräte, obwohl sie hardwarebasierte Sensoren nachahmen. Sie leiten ihre Daten von einem oder mehreren der hardwarebasierten Sensoren ab und werden manchmal als virtuelle Sensoren oder synthetische Sensoren bezeichnet. Der lineare Beschleunigungssensor und der Schwerkraftsensor sind Beispiele für softwarebasierte Sensoren. Tabelle 1 fasst die Sensoren zusammen, die von der Android-Plattform unterstützt werden.
Nur wenige Android-Geräte haben alle Arten von Sensoren. Zum Beispiel haben die meisten Handgeräte und Tablets einen Beschleunigungsmesser und ein Magnetometer, aber weniger Geräte haben Barometer oder Thermometer.
Tabelle 1. Sensortypen, die auf der Android-Plattform unterstützt werden .
Sensor Framework
Man kann auf diese Sensoren zugreifen und rohe Sensordaten mithilfe des Android-Sensor-Frameworks erfassen. Das Sensor-Framework ist Teil des android.hardware-Pakets und umfasst die folgenden Klassen und Interfaces:
Man kann diese Klasse verwenden, um eine Instanz des Sensor-Service zu erstellen. Diese Klasse bietet verschiedene Methoden wie z.B. für den Zugriff und Auflisten von Sensoren.
Man kann diese Klasse verwenden, um eine Instanz eines bestimmten Sensors zu erstellen. Diese Klasse bietet verschiedene Methoden, mit denen man die Fähigkeiten eines Sensors bestimmen kann.
Das System erstellt mit dieser Klasse ein Sensorereignisobjekt, das Informationen zu einem Sensorereignis liefert. Ein Sensorereignisobjekt enthält die folgenden Informationen:
- die Rohsensordaten,
- den Typ des Sensors,
- der das Ereignis generiert hat,
- die Genauigkeit der Daten und
- den Zeitstempel für das Ereignis.
Man kann dieses Interface verwenden, um zwei Callback-Methoden zu erstellen, die Benachrichtigungen (Sensorereignisse) empfangen, wenn sich Sensorwerte ändern oder wenn sich die Sensorgenauigkeit ändert.
In einer typischen Anwendung verwendet man diese sensorbezogenen APIs, um zwei grundlegende Aufgaben auszuführen:
- Identifizieren von Sensoren und Sensorfähigkeiten zur Laufzeit ist nützlich, wenn Ihre Anwendung über Funktionen verfügt, die auf bestimmten Sensortypen oder -funktionen beruhen. Beispielsweise möchtest du möglicherweise alle Sensoren identifizieren, die auf einem Gerät vorhanden sind, und alle Anwendungsfunktionen deaktivieren, die auf Sensoren basieren, die nicht vorhanden sind. Ebenso möchtest du vielleicht alle Sensoren eines bestimmten Typs identifizieren, damit Sie die Sensorimplementierung auswählen können, die die optimale Leistung für Ihre Anwendung bietet.
- Überwachen von Sensorereignissen ist, eigentlich wie man rohe Sensordaten erfassen kann. Ein Sensorereignis tritt jedes Mal auf, wenn ein Sensor eine Änderung der Parameter erkennt, die der Sensor misst. Ein Sensorereignis liefert vier Informationen:
- den Namen des Sensors,
- der das Ereignis ausgelöst hat,
- den Zeitstempel für das Ereignis,
- die Genauigkeit des Ereignisses und
- die unformatierten Sensordaten, die das Ereignis ausgelöst haben.
Bewegungssensoren
Die Plattform von Android bietet mehrere Sensoren an, mit denen man die Bewegung eines Geräts überwachen kann.
Die möglichen Architekturen der Sensoren variieren je nach Sensortyp:
- Die Sensoren für Gravitation, lineare Beschleunigung, Rotationsvektor, signifikante Bewegung, Schrittzähler und Schrittdetektor sind entweder hardwarebasiert oder softwarebasiert.
- Beschleunigungssensoren und Gyroskopsensoren sind immer hardwarebasiert.
Die meisten Android-Geräte verfügen über einen Beschleunigungssensor und viele enthalten auch schon ein Gyroskop. Die Verfügbarkeit der softwarebasierten Sensoren ist variabel, da sie häufig auf einen oder mehrere Hardware-Sensoren angewiesen sind, um ihre Daten abzuleiten. Je nach Gerät können diese softwarebasierten Sensoren ihre Daten entweder vom Beschleunigungsmesser und Magnetometer oder vom Gyroskop ableiten.
Bewegungssensoren sind nützlich für die Überwachung von Gerätebewegungen wie Neigen, Schütteln, Drehen oder Schwenken. Die Bewegung ist normalerweise eine Reflektion direkter Benutzereingabe (z.B. ein User, der ein Auto in einem Spiel), aber es kann auch eine Reflektion der physischen Umgebung sein, in der das Gerät sitzt (z.B., wenn man mit dem Auto unterwegs ist). Im ersten Fall überwachen Sie die Bewegung relativ zum Referenzrahmen des Geräts oder zum Referenzrahmen Ihrer Anwendung. Im zweiten Fall überwachen Sie die Bewegung relativ zum Bezugsrahmen der Welt. Bewegungssensoren selbst werden normalerweise nicht zur Überwachung der Geräteposition verwendet. Sie können jedoch mit anderen Sensoren, wie z. B. dem Erdmagnetfeldsensor, verwendet werden, um die Position eines Geräts relativ zum Referenzsystem der Welt zu bestimmen.
Bewegungssensoren geben mehrdimensionale Arrays von Sensorwerten für jedes SensorEvent zurück. Z.B. gibt der Beschleunigungsmesser während eines einzelnen Sensorereignisses Beschleunigungskraftdaten für die drei Koordinatenachsen zurück, und das Gyroskop gibt die Rotationsgeschwindigkeitsdaten für die drei Koordinatenachsen zurück. Diese Datenwerte werden in einem Float-Array (Werte) zusammen mit anderen SensorEvent-Parametern zurückgegeben. Tabelle 2 fasst die Bewegungssensoren zusammen, die auf der Android-Plattform verfügbar sind.
Tabelle 2. Bewegungssensoren, die auf der Android-Plattform unterstützt werden.
Beispiel Schwerkraftsensor
Der Schwerkraftsensor liefert einen dreidimensionalen Vektor, der die Richtung und Größe der Schwerkraft anzeigt. In der Regel wird dieser Sensor verwendet, um die relative Ausrichtung des Geräts im Raum zu bestimmen. Der folgende Code zeigt, wie man eine Instanz des Standard-Schwerkraftsensors erhält:
Die Einheiten entsprechen denen des Beschleunigungssensors (m / s2). Das Koordinatensystem entspricht dem des Beschleunigungssensors.
Positionssensoren
Die Android-Plattform bietet zwei Sensoren, mit denen man die Position eines Geräts bestimmen kann:
- den Erdmagnetfeldsensor und
- den Beschleunigungssensor.
Die Plattform von Android bietet außerdem einen Sensor, mit dem man bestimmen kann, wie nah ein Geräts an einem anderen Objekt ist (Annäherungssensor). Der Erdmagnetfeldsensor und der Näherungssensor sind hardwarebasiert. Die meisten Handset- und Tablet-Hersteller enthalten einen Erdmagnetfeldsensor. In ähnlicher Weise enthalten Handset-Hersteller üblicherweise einen Annäherungssensor, um zu bestimmen, wann ein Handgerät in der Nähe des Gesichts eines Benutzers gehalten wird (beispielsweise während eines Telefonanrufs). Zur Bestimmung der Ausrichtung eines Geräts kann man die Messwerte des Beschleunigungssensors des Geräts und des Erdmagnetfeldsensors verwenden.
Hinweis: Der Orientierungssensor wurde in Android 2.2 (API-Stufe 8) nicht mehr unterstützt, und der Orientierungssensortyp wurde in Android 4.4W (API-Stufe 20) nicht mehr verwendet.
Positionssensoren sind nützlich, um die physische Position eines Geräts im Referenzrahmen der Welt zu bestimmen. Z.B. kann man den Erdmagnetfeldsensor in Kombination mit dem Beschleunigungssensor verwenden, um die Position eines Geräts relativ zum magnetischen Nordpol zu bestimmen. Man kann diese Sensoren auch verwenden, um die Ausrichtung eines Geräts im Referenzrahmen Ihrer Anwendung zu bestimmen. Positionssensoren werden normalerweise nicht zur Überwachung von Bewegungen oder Bewegungen des Geräts verwendet, wie z. B. Erschütterungen, Neigungen oder.
Der Erdmagnetfeldsensor und der Beschleunigungsmesser geben mehrdimensionale Arrays von Sensorwerten für jedes SensorEvent zurück. Z.B. liefert der Erdmagnetfeldsensor Erdmagnetfeldstärkewerte für jede der drei Koordinatenachsen während eines einzelnen Sensorereignisses. In ähnlicher Weise misst der Beschleunigungssensor die Beschleunigung, die während eines Sensorereignisses an das Gerät angelegt wird.
Der Näherungssensor liefert einen einzelnen Wert für jedes Sensorereignis. Tabelle 3 fasst die Positionssensoren zusammen, die auf der Android-Plattform unterstützt werden.
Tabelle 3. Positionssensoren, die auf der Android-Plattform unterstützt werden.
Umgebungssensoren
Die Android-Plattform bietet vier Sensoren, mit denen man verschiedene Umgebungseigenschaften überwachen kann. Mit diesen Sensoren kann man:
- relative Umgebungsfeuchtigkeit,
- Beleuchtungsstärke,
- Umgebungsdruck und
- Umgebungstemperatur in der Nähe eines Android-Geräts überwachen.
Alle vier Umgebungssensoren sind hardwarebasiert und nur verfügbar, wenn ein Gerätehersteller sie in ein Gerät eingebaut hat. Mit Ausnahme des Lichtsensors, mit dem die meisten Gerätehersteller die Bildschirmhelligkeit steuern, sind Umgebungssensoren nicht immer auf Geräten verfügbar. Aus diesem Grund ist es besonders wichtig, dass Sie zur Laufzeit überprüfen, ob ein Umgebungssensor vorhanden ist, bevor man versucht, Daten zu erfassen.
Im Gegensatz zu den meisten Bewegungssensoren und Positionssensoren, die für jedes SensorEvent ein mehrdimensionales Array von Sensorwerten zurückgeben, geben Umgebungssensoren für jedes Datenereignis einen einzelnen Sensorwert zurück (z.B. Temperatur in ° C, der Druck in hPa). Umgebungssensoren erfordern typischerweise keine Datenfilterung oder Datenverarbeitung. Tabelle 4 enthält eine Zusammenfassung der Umgebungssensoren, die auf der Android-Plattform unterstützt werden.
Tabelle 4. Umgebungssensoren, die auf der Android-Plattform unterstützt werden.
Beispiel Licht-, Druck- und Temperatursensoren
Die Rohdaten, die Sie von den Licht-, Druck- und Temperatursensoren erhalten, erfordern normalerweise keine Kalibrierung, Filterung oder Modifizierung, was sie zu den einfachsten zu verwendenden Sensoren macht. Um Daten von diesen Sensoren zu erfassen, erstellt man eine Instanz der SensorManager-Klasse, mit der Sie eine Instanz eines physikalischen Sensors ermitteln kann. Dann registriert man einen Sensor-Listener in der onResume () -Methode und beginnen mit eingehenden Sensordaten in der onSensorChanged () – Callback-Methode. Der folgende Code zeigt, wie es funktioniert:
Man muss immer Implementierungen der onAccuracyChanged () – und onSensorChanged () – Callback-Methoden einschließen. Stelle sicher, dass die Registrierung eines Sensors immer aufgehoben wird, wenn eine Aktivität unterbrochen wird. Dies verhindert, dass ein Sensor kontinuierlich Daten erfasst und die Batterie entleert.
Quelle & Bilder: https://developer.android.com/guide/topics/sensors/
The comments are closed.