Christopher Mathes ASN-Tracker Dokumentation - Backend: Sensorik, Geräte-Informationen Sensorik: Mit der Android-API 21 lassen sich (abzüglich der als deprecated markierten Sensoren insgesamt 18 Sensoren abfragen. Diese Sensoren werden unterteilt in drei Kategorien: Motion Sensors (Bewegungssensoren), Environmental Sensors (Umgebungssensoren) und Position Sensors (Positionssensoren). Ein wichtiger Bestandteil zur Sensorik ist der SensorManager. SensorManager: Diese Android-Klasse wird für den sensor service genutzt. Der Manager wird benötigt um neue Instanzen vom sensor service zu erstellen. Er dient dazu, die jeweiligen Sensoren mittels der vorgefertigten Methoden zu registrieren, deregistrieren durch zu Hilfenahme des SensorEventListener. Weitere damit verbundene Klassen sind: Sensor, SensorEvent und der SensorEventListener. Motion Sensors Sensor ID Erklärung Werte Einheit Accelerometer 1 Misst Beschleunigungskräfte in Relation zur Gravitationskraft des Android-Devices in alle drei Achsenrichtungen Gravity 9 Misst die Gravitationskraft des Android-Devices in alle drei Achsenrichtungen Gyroscope 4 Misst die Rotationsrate des Android-Devices in alle drei Achsenrichtungen GyroscopeUncalibrated 16 Gibt ähnlich dem Gyroscope Werte aller drei Achsenrichtungen zurück, hat jedoch zusätzlich drei weitere Rückgabewerte. Die Kalibrierung der Gyroscope-Daten wird jedoch nicht komplett durchgeführt. Dies kann von erfahreren Nutzern durch entsprechende Codierung selbst vorgenommen wurden LinearAcceleration 10 Misst die Beschleunigungskraft eines Android-Devices in alle drei Achsenrichtungen ohne Bezug zur Gravitationskraft StepCounter 19 Berechnet in Verbindung mit dem Sensor: Accelerometer wie häufig eine bestimmte (für das Zählen eines Schritts genügende) Bewegung des Android-Devices vorgenommen wurde 3 m/s² 3 m/s² 3 rad/s 6 rad/s 3 m/s² 1 #steps
StepDetection 18 Erkennt Schritte des Benutzers. In Verbindung mit dem Sensor: Accelerometer des Android- Devices RotationVector 11 Misst die Richtung der Orientierung durch Nutzung der Rotationsvektoren des Android- Devices (Nutzt das geomagnetische Feld) 1 --- 4 --- Position Sensors Sensor ID Erklärung Werte Einheit GameRotationVector 15 Misst ähnlich wie der RotationVector, mit dem Unterschied das er die Daten des geomagnetischen Feldes nicht berücksichtigt. Dieser Sensor findet beispielsweise Anwendung in Android-Spielen bei denen die Himmelsrichtung uninteressant ist. Durch dieses Vernachlässigen der geomagnetischen Feldwerte, kann man höhere Genauigkeit erreichen GeomagneticRotationVector 20 Misst ähnlich wie der RotationVector, mit dem Unterschied das er das Magnetometer benutzt anstatt des Gyroskops MagneticField 2 Misst das Geomagnetische Feld für alle drei Achsenrichtungen des Android-Devices MagneticFieldUncalibrated 14 Ähnlich den Rückgabewerten des Sensors: GyroscopeUncalibrated, gibt auch dieser Sensor sechs Werte zurück. Dieser Sensor kann von Entwicklern dazu benutzt werden, seinen eigenen Code für die genaue Kalibrierung der Magnetischen Feldwerte vorzunehmen Orientation 3 Misst die an Rotation vollbrachten Grad um alle drei Achsenrichtungen eines Android-Devices 3 --- 3 --- 3 µt 6 µt 3 Grad
Proximity 8 Misst die Entfernung eines Objekts in Bezug auf die Entfernung der Frontseite des Android-Devices 1 cm Environmental Sensors Sensor ID Erklärung Werte Einheit AmbientTemperature 13 Gibt die Umgebungstemperatur 1 Grad Celsius zurück Light 5 Misst die Umgebungshelligkeit 1 lx (Lux) Pressure 6 Gibt den Luftdruck zurück 1 hpa oder mbar RelativeHumidity 12 Misst die Luftfeuchtigkeit 1 % Des Weiteren gibt es den Sensor TYPE_TEMPERATURE welcher mit dem API level 14 als deprecated bezeichnet wurde sowie den Sensor TYPE_HEART_RATE, welcher für Google Wear Kleidung gedacht ist. GPS: Die implementierte GPS-Möglichkeit des ASN-Trackers nutzt eine String-Methode, welche als Getter fungiert und eine Methode ohne Rückgabewert, welche die GPS-Daten aktualisiert. Über einen LocationManager wird der SystemService LOCATION_SERVICE aufgerufen. Dieser Service ermöglicht es die Informationen Breitengrad (latitude), Längengrad (longitude) und die Genauigkeit der Messung (accuracy) herauszulesen. Zusätzlich zum LocationManager wird eine Variable locationmanagergps des Objekttyps Location genutzt, welche mit Hilfe des Funktionsaufrufs getlastknownlocation(locationmanager ) über den initialisierten LocationManager die drei Werte erfassen kann. Die genannte Methode kann mit zwei verschiedenen Parametern arbeiten. LocationManager.GPS_PROVIDER und LocationManager.NETWORK_PROVIDER. Um eine bessere Genauigkeit der Ermittlung von Breiten- und Längengrad zu erhalten und vor allem eine wesentlich schnellere Ermittlung der Daten, wird im Allgemeinen NETWORK_PROVIDER vorgezogen.
Geräte-Informationen: Die Geräte-Informationen, die über das zugehörige Fragment im Settings-Bereich der App ausgewählt werden können, werden untergliedert in vier Hauptkategorien. Diese sind: Device, System, Battery, Telephony. Außerdem enthalten die Geräte-Informationen eine Auflistung der einzelnen Sensoren mit Angabe des Herstellers, der Range (Reichweite/Genauigkeit) und dem entsprechenden Namen. Die Hauptkategorien enthalten Unterkategorien welche verschiedene Spezifikationen voneinander trennen. Nachfolgend eine genauere Auflistung der einzelnen Informationen. Kategorie Unterkategorie Information Erklärung Device Info Build number Device Build Nummer OS Version Android Version Model Device Modelnummer Device Device Modeltyp Product Device Produkttyp Manufacturer Hersteller (Device) SDK Android SDK-Version Display Res-X Auflösung () Res-Y Auflösung () Density Auflösung in (dots per inch) Size Displaygröße in Zoll Refresh-rate Bildwiederholungsrate System Processor Cores Anzahl CPU-Kerne CPU-Architecture CPU-Architektur Board Board-Modeltyp Kernel-Version Kernel-Versionsnummer Kernel-Architecture Kernel-Architekturtyp Min Minimale Taktfrequenz Max Maximale Taktfrequenz Memory Total Ram Maximaler Arbeitsspeicher Battery Battery Technology Batterietyp Temperature Temperatur in Grad Celsius Voltage Anzahl Volt Capacity Batteriekapazität in mah Sensors --- Vendor Hersteller Range Genauigkeit des Sensors Name Name des Sensors Telephony --- Name Anbieter der SIM-Karte
Auslesen einzelner Geräte-Informationen: Nach dem Öffnen des Fragments über den Settings-Bereich, werden die Geräte-Informationen angezeigt. Wie unter den folgenden Punkten i) bis v) beschrieben, lassen sich einige Informationen nur über spezielle Listener oder Methoden- und Konstruktoren-Aufrufe von vorgefertigten Android-Klassen ausgeben. i) Device Unterkategorie: Info Die Informationen der Unterkategorie Info werden gesammelt in einem Stringbuffer, umgewandelt zu einem String, übergeben. Die einzelnen Informationen werden per Methodenaufruf android.os.build.* abgerufen. Unterkategorie: Display Die Displayinformationen werden als String übergeben nach Initialisierung des SystemServices WINDOW_SERVICE der auf einer Variable des Objekttyps Display aufgerufen wird. Für die Angaben der Breite, Höhe sowie der Größe des Screens sind einfache mathematische Umformungen nötig. Für die Breite, Höhe sowie der Auflösung und der Größe des Screens wird zusätzlich der Methodenaufruf getmetrics(displaymetrics) benötigt. ii) System Unterkategorie: Processor Die Prozessorinformationen werden teilweise über einfache System-Calls abgegriffen (System.getProperty( gewünschte Information )). Die Anzahl an CPU- Kernen des Android-Devices lässt sich über die, zur Runtime auszuführenden Methode availableprocessors() ausgeben. Für die Bestimmung der minimalen und maximalen CPU-Frequenz in Megahertz, werden die eigens angefertigten Methoden cpuminfrequency() und cpumaxfrequency() aufgerufen. Diese Methoden nutzen einen Reader vom Objekttyp RandomAccessFile um die minimale und maximale CPU-Auslastung zu ermitteln. Unterkategorie: Memory Ähnlich der Einholung von Informationen bezüglich der minimalen/maximalen CPU- Frequenz, wird die Information zum Total RAM auch über ein Objekt des Typs RandomAccesFile über einen Reader eingeholt. Es erfolgt eine Umrechnung um die Ausgabe in eine entsprechende Einheit ausgeben zu können. iii) Battery Unterkategorie: Battery Zur Ermittlung der Informationen der Kategorie Battery wird ein BroadcastReceiver genutzt welcher auf den BatteryManager zugreift um Angaben der Technologieart der Batterie zu erlangen, sowie der Temperatur und der Voltanzahl. Die Batteriekapazität in milli-ampere-stunden erhält man über die genutzt Methode getbatterycapacity(). Diese nutzt die Java-Klasse die für PowerProfile erstellt wurde.
iv) Sensors Unterkategorie: --- Die Informationen zu den Sensoren des Android-Devices werden eingeholt indem eine Variable des Typs Sensor durch iteriert wird, durch die Liste aller verfügbaren Sensoren des jeweiligen Endgeräts. Pro Schleifendurchlauf wird vom jeweiligen Sensor, dessen Name, Hersteller und die Genauigkeit der Messung in eine StringBuffer-Variable geschrieben und im entsprechenden Fragment, geordnet untereinander aufgelistet. v) Telephony Unterkategorie: --- Den Provider der Sim-Karte des Android-Devices lässt sich mit dem Methodenaufruf getsimoperatorname() ermitteln. Diese Methode verlangt das Initialisieren eines TelephonyManagers, welcher den SystemService TELEPHONY_SERVICE nutzt.