Mobile App Development - Sensoren -



Ähnliche Dokumente
Android-Apps weitere Möglichkeiten

Software-Entwicklung für Android und ios

Mobile App Development. - Alarm -

Android-Geräte Programmieren 3. Sensoren. Stefan Rothe

3. Erfassung und Verarbeitung von Sensordaten

Naviki GPS-Anwendungsentwicklung für Mobiltelefone

Einführung in die Android App-Entwicklung. Patrick Treyer und Jannis Pinter

Android Apps. Mentoring SS 16. Nicolas Lehmann, Sönke Schmidt, Alexander Korzec, Diane Hanke, Toni Draßdo

Teil I Augmented Learning - Vortragender: Krischan Udelhoven. Teil II Android - Vortragender: Folker Hoffmann

Technische Hochschule Georg Agricola WORKSHOP TEIL 3. IKT (Informations- und Kommunikationstechnik) an einer MorseApp erklärt

Java: Vererbung. Teil 3: super()

Google Android API. User Interface. Eine knappe Einführung

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Vorkurs C++ Programmierung

Android GUI Entwicklung

Java Einführung Collections

INDEX. Öffentliche Ordner erstellen Seite 2. Offline verfügbar einrichten Seite 3. Berechtigungen setzen Seite 7. Öffentliche Ordner Offline

Fidbox App. Version 3.1. für ios und Android. Anforderungen für Android: Bluetooth 4 und Android Version 4.1 oder neuer

Einführung in die Java- Programmierung

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Ordner Berechtigung vergeben Zugriffsrechte unter Windows einrichten

Support-Tipp Mai Release Management in Altium Designer

4.1 Download der App über den Play Store

Grundfunktionen und Bedienung

TELIS FINANZ Login App

Der schnelle Weg zu Ihrer eigenen App

GeoPilot (Android) die App

Kurzanweisung für Google Analytics

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Leitfaden zur Nutzung von binder CryptShare

Objektorientierte Programmierung

Android-Apps Google-Maps v2

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Informationen Zur Ticketregistrierung

Erstellen einer in OWA (Outlook Web App)

NetStream Helpdesk-Online. Verwalten und erstellen Sie Ihre eigenen Tickets

Innere Klassen in Java

Delegatesund Ereignisse

Mobile-Szenario in der Integrationskomponente einrichten

Sophos Anti-Virus. ITSC Handbuch. Version Datum Status... ( ) In Arbeit ( ) Bereit zum Review (x) Freigegeben ( ) Abgenommen

Updatehinweise für die Version forma 5.5.5

Übungen zur Android Entwicklung

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Java Kurs für Anfänger Einheit 5 Methoden

Nutzungsmöglichkeiten der interaktiven Westoverledingen Karte

Anleitung zum Online-Monitoring für Installateure

Smart Home. Quickstart User Guide

Word 2010 Schnellbausteine

SJ OFFICE - Update 3.0

Mit der Maus im Menü links auf den Menüpunkt 'Seiten' gehen und auf 'Erstellen klicken.

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Stellvertretenden Genehmiger verwalten. Tipps & Tricks

Android Smartphones. 1 Aktualisieren des 1&1 STORE (1&1 Apps)

Neuerungen im Hostpoint Webshop von Version 6.15 zu 6.16

Arbeitsblatt Arbeit und Energie

Wo Ist Mein Kind App

Übung - Arbeiten mit Android

Über die Internetseite Hier werden unter Download/aktuelle Versionen die verschiedenen Module als zip-dateien bereitgestellt.

Programmierkurs Java

Benutzerhandbuch MedHQ-App

Technische Dokumentation SilentStatistikTool

FAQ s für adevital ANALYSIS BA 1400 / BA 1401 (Körperanalysewaage) mit der adevital plus App

Toleranzschema. ArtemiS SUITE

Internet Explorer Version 6

Android-Apps ein komplexes Beispiel (Google-Maps und GPS-Daten, Listen, SD-Kartenzugriff, Activities mit Rückgabewerten und Web-Browser/Internet)

Java Einführung Abstrakte Klassen und Interfaces

Bedienungsanleitung PC-Konfigurationssoftware des ID Inclinometers

Professionelle Seminare im Bereich MS-Office

Insight aus der Webseite!

Bauteilattribute als Sachdaten anzeigen

file://c:\documents and Settings\kfzhans.BUERO1\Local Settings\Temp\ e...

Einführung in die Programmierung

GEVITAS Farben-Reaktionstest

Einrichtungsanleitungen Hosted Exchange 2013

BlackBerry Bridge. Version: 3.0. Benutzerhandbuch

App CCTV INET VIEWER. Folgende Funktionen stehen in der App zur Verfügung:

Informationen als Leistung

Vorgehensweise bei Lastschriftverfahren

Der große VideoClip- Wettbewerb von Media Markt.

Dokumentation PuSCH App. windows-phone

FIS: Projektdaten auf den Internetseiten ausgeben

Task: Nmap Skripte ausführen

Bewusster Umgang mit Smartphones

Beschreibung Regeln z.b. Abwesenheitsmeldung und Weiterleitung

1 Belastung. 1.1 Standortbestimmung 1.2 Belastungsvorhersage 1.3 Favoriten

Einleitung: Frontend Backend

Arbeiten mit dem Outlook Add-In

YouTube: Video-Untertitel übersetzen

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 22

Info zum Zusammenhang von Auflösung und Genauigkeit

Tutorial/FAQ für die Benutzung der Webseite

SEMINAR Modifikation für die Nutzung des Community Builders

ACDSee Pro 2. ACDSee Pro 2 Tutorials: Übertragung von Fotos (+ Datenbank) auf einen anderen Computer. Über Metadaten und die Datenbank

ÖKB Steiermark Schulungsunterlagen

12. Dokumente Speichern und Drucken

Registrierung Ihres Fachbesucher Tickets

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Transkript:

Mobile App Development - Sensoren -

Inhalt Sensoren Sensor Framework Bewegungssensoren Posi2onssensoren Umweltsensoren?????????? GPS??????????

Sensoren

Sensoren Was ist ein Sensor?

Sensoren Defini2on Sensor Ein Sensor ist ein technisches Bauteil, das eine physikalische Größe der Umwelt und ihre Änderungen in digitale Signale umwandelt.

Sensoren Android unterscheidet drei Kategorien von Sensoren: Bewegungssensoren Diese Sensoren messen KräKe die auf das Gerät wirken, z. B. Beschleunigung, Gravita2on und Drehung

Sensoren Posi2onssensoren Diese Sensoren messen die physikalische Posi2on des Gerätes, z. B. die Orien2erung Umweltsensoren Diese Sensoren messen Umwelt- parameter, wie Temperatur, Druck und LuKfeuch2gkeit

Sensoren Weiterhin wird zwischen zwei Arten von Sensoren unterschieden Hardware- basierte Sensoren SoKware- basierte Sensoren

Sensoren Hardware- basierte Sensoren greifen direkt auf physikalische Komponenten zu und erhalten Messwerte SoKware- basierte Sensoren erhalten ihre Daten von einem oder mehreren Hardware- Sensoren und imi2eren einen vorhandenen Sensor

Sensoren Sensor Koordinatensystem Einige Sensoren, die dreidimensionale Daten liefern, haben eine gemeinsames Koordinatensystem Das Koordinatensystem ist rela2v zur Standardorien2erung des Geräte ausgerichtet

Sensoren Sensor Koordinatensystem X- Achse horizontal und zeigt nach rechts Y- Achse ver2kal und zeigt nach oben Z- Achse Normale auf XY- Ebene und zeigt aus dem Display heraus Bildquelle: http://developer.android.com/images/axis_device.png

Sensoren Beachten: Das SKS wird nicht gedreht, wenn sich die Orien2erung des Gerätes ändert. Es bleibt rela2v zur natürlichen Posi2on. Die natürliche Orien2erung verschiedener Geräte kann variieren, siehe Smartphone und Tablet. Bildquelle: http://developer.android.com/images/axis_device.png

Sensor Framework

Sensor Framework Android stellt ein Sensor Framework zum Zugriff auf Sensoren bereit Das Sensor Framework ist eine Reihe von Klassen, um Sensoren zu verwalten, Listener zu registrieren und Sensorereig- nisse zu erhalten

Sensor Framework Das Sensor Framework besteht aus den Klassen SensorManager Sensor SensorEvent SensorEventListener

Sensor Framework SensorManager dient als System Service zum Zugriff auf Sensoren enthält Konstanten für die verschiedenen Sensortypen & Standardwerte Registrierung von SensorEventListener

Sensor Framework Sensor repräsen2ert einen Sensor enthält Methoden, um EigenschaKen des Sensors abzurufen Genauigkeit (Auflösung) Energieverbrauch Hersteller, Version,...

Sensor Framework SensorEvent repräsen2ert ein Sensorereignis enthält verschieden Informa2onen Sensor, der das Ereignis erzeugt hat Zeitstempel Messwert Genauigkeit des Ereignisses

Sensor Framework SensorEventListener wird verwendet, um sich als Listener für Sensor Änderung zu registrieren informiert über neue Sensor Werte Genauigkeitsänderungen

Sensor Framework Alle Sensoren auflisten public class SensorActivity extends ListActivity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // sensor service abrufen SensorManager mng = (SensorManager) getsystemservice(sensor_service); // Liste aller Sensoren abfragen List<Sensor> allsensors = mng.getsensorlist(sensor.type_all); } } // Sensoren in einer ListActivity darstellen ArrayAdapter<String> adapter = new ArrayAdapter<String>(!! this, android.r.layout.simple_list_item_1); for (Sensor sensor : allsensors) {! adapter.add(sensor.getname()); } setlistadapter(adapter);

Sensor Framework Um eine Referenz auf einen bes2mmten Sensor zu bekommen, wird der Methode getdefaultsensor() eine Typ- Konstante übergeben Die Methode gibt den Standardsensor für den angegebenen Typ zurück

Sensor Framework Einen bes2mmten Sensor abrufen public class ProximityActivity extends Activity! private SensorManager msensormng; private Sensor mproxsensor; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); } } // Instanz vom SensorManager abrufen msensormng = (SensorManager) getsystemservice(sensor_service); // Entfernungssensor abrufen mproxsensor = msensormng.getdefaultsensor(sensor.type_proximity); if (mproxsensor!= null) {! // SensorListener registrieren } else {! // Fehler: Kein Abstandssensor vorhanden }

Sensor Framework Mit dem SensorManager können SensorEventListener registriert werden, die bei neuen Sensor Events informiert werden Hinweis: Diese sollten auch wieder deregistriert werden, wenn sie nicht mehr gebraucht werden!

Sensor Framework SensorEventListener implemen2eren public class ProximityActivity extends Activity implements SensorEventListener {! @Override! public void onsensorchanged(sensorevent event) { // neuen Sensorwert verarbeiten!! Log.d(TAG, "Proximity is: " + event.values[0]);! } @Override! public void onaccuracychanged(sensor sensor, int accuracy) { // auf Genauigkeitsänderungen reagieren!! switch (accuracy) {!!! case SensorManager.SENSOR_STATUS_ACCURACY_HIGH: { /*... */ }!!! case SensorManager.SENSOR_STATUS_ACCURACY_MEDIUM: { /*... */ }!!! case SensorManager.SENSOR_STATUS_ACCURACY_LOW: { /*... */ }!!! case SensorManager.SENSOR_STATUS_UNRELIABLE: { /*... */ }!! }! } }

Sensor Framework SensorEventListener registrieren public class ProxActivity extends Activity implements SensorEventListener { private SensorManager msensormng; private Sensor mproxsensor;! public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // msensormng & mproxsensor } protected void onresume() {! super.onresume();! // SensorEventListener registrieren! if (mproxsensor!= null) {!! msensormng.registerlistener(this, mproxsensor,!!!! SensorManager.SENSOR_DELAY_UI);! } } protected void onpause() {! // SensorEventListener deregistrieren! msensormng.unregisterlistener(this);! super.onpause(); } }

Bewegungssensoren

Bewegungssensoren Android unterstützt verschiedene Arten von Bewegungssensoren Beschleunigungssensor Gravita2onssensor Gyroskop Rota2onsvektor

Bewegungssensoren Beschleunigungssensor... misst die BeschleunigungskräKe die auf ein Gerät wirken in drei Dimensionen Die Messwerte enthalten zusätzlich die BeschleunigungskräKe, die durch die Erdanziehung wirken Die Einheit der Werte ist m/s 2

Bewegungssensoren Beschleunigungssensor verwenden public class AccelerationActivity extends Activity {!! private SensorManager msensormng;! private Sensor accelsensor;! @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_acceleration); } } // Referenz auf den SensorManger holen msensormng = (SensorManager) getsystemservice(sensor_service); // Referenz auf Beschleunigungssensor holen accelsensor = msensormng.getdefaultsensor(sensor.type_accelerometer);

Bewegungssensoren SensorEventListener (de)registrieren public class AccelerationActivity extends Activity!! implements SensorEventListener {! private SensorManager msensormng; private Sensor accelsensor; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); msensormng = (SensorManager) getsystemservice(sensor_service); accelsensor = msensormng.getdefaultsensor(sensor.type_accelerometer); } protected void onresume() {! super.onresume(); if (accelsensor!= null) {! msensormng.registerlistener(this, accelsensor,!!!!!!!!!! SensorManager.SENSOR_DELAY_UI); } } } protected void onpause() {! msensormng.unregisterlistener(this);! super.onpause(); }

Bewegungssensoren Beschleunigungswerte auslesen public class AccelerationActivity extends Activity!! implements SensorEventListener {! private float[] gravity = new float[]{1, 1, 1};! private float[] linear_acceleration = new float[]{0, 0, 0};! public void onsensorchanged(final SensorEvent event) { Log.d(TAG, "Acceleration(x,y,z): " + event.values[0] + " " +!!!! event.values[1] + " " + event.values[2]);! }! public void onaccuracychanged(sensor sensor, int accuracy) { /*...*/ } }

Bewegungssensoren Problem: Beschleunigungswerte enthalten die Erdbeschleunigung Was heißt das? Beispiele: Gerät liegt mit Display nach oben auf dem Tisch, x? y? z? Gerät steht auf der linken Seite, x?, y?, z? Gerät steht auf dem Kopf, x?, y?, z?

Bewegungssensoren Gravita2on filtern public class AccelerationActivity extends Activity!! implements SensorEventListener {! private float[] gravity = new float[]{1, 1, 1};! private float[] linear_acceleration = new float[]{0, 0, 0};! public void onsensorchanged(final SensorEvent event) {!! final float alpha = 0.8f;!! // lowpass filter!! gravity[0] = alpha * gravity[0] + (1 - alpha) * event.values[0];!! gravity[1] = alpha * gravity[1] + (1 - alpha) * event.values[1];!! gravity[2] = alpha * gravity[2] + (1 - alpha) * event.values[2];!! // highpass filter!! linear_acceleration[0] = event.values[0] - gravity[0];!! linear_acceleration[1] = event.values[1] - gravity[1];!! linear_acceleration[2] = event.values[2] - gravity[2];! }! public void onaccuracychanged(sensor sensor, int accuracy) { /*...*/ } }

Bewegungssensoren Wofür kann der Beschleunigungssensor verwendet werden? Bewegungserfassung: Schlafphasenwecker Don t touch my Droid Seismograph App Gestenerkennung: z. B. Shake

Bewegungssensoren Linearer Beschleunigungssensor Der lineare Beschleunigungssensor liefert die Beschleunigung des Gerätes in drei Dimensionen Im Gegensatz zum normalen Beschleunigungssensor ist die Gravita2on bereits rausgerechnet

Bewegungssensoren Linearen Beschleunigungssensor verwenden public class LinAccelActivity extends Activity!! implements SensorEventListener {! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!!!! msensormng = (SensorManager) getsystemservice(sensor_service);!! mgravitysensor = msensormng!!!.getdefaultsensor(sensor.type_linear_acceleration);! }! // SensorListener in onresume()/onpause() registrieren/deregistrieren! public void onsensorchanged(sensorevent event) {!! Log.d(TAG, "Linear Acceleration = " + event.values[0] + " " +!!!! event.values[1] + " " + event.values[2]);!!! }! public void onaccuracychanged(sensor sensor, int accuracy) { /*... */ } }

Bewegungssensoren Gravita2onssensor erzeugt einen dreidimensionalen Vektor, der die Richtung der Gravita2on angibt Der Vektor ist rela2v zum Geräte- Koordinatensystem Die verwendeten Einheiten sind wie beim Beschleunigungssensor m/s 2

Bewegungssensoren Wo liegt der Unterschied zwischen Gravita2ons- und Beschleunigungssensor?

Bewegungssensoren Wo liegt der Unterschied zwischen Gravita2ons- und Beschleunigungssensor? Der Beschleunigungssensor misst alle BeschleunigungskräKe, die auf das Geräte wirken Der Gravita2onssensor zeigt nur die Richtung der Gravita2on an

Bewegungssensoren Den Gravita2onssensor verwenden public class GravityActivity extends Activity implements SensorEventListener {! private SensorManager msensormng;! private Sensor mgravitysensor;!! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!! msensormng = (SensorManager) getsystemservice(sensor_service);!! mgravitysensor = msensormng.getdefaultsensor(sensor.type_gravity);! }!! // SensorListener in onresume() registrieren und onpause() deregistrieren! public void onsensorchanged(sensorevent event) {!! Log.d(TAG, "Gravity(x,y,z) = " + event.values[0] + " " +!!!! event.values[1] + " " + event.values[2]);! }! public void onaccuracychanged(sensor sensor, int accuracy) { /*... */ } }

Bewegungssensoren Gyroskop Das Gyroskop misst die Rota2ons- geschwindigkeit um die Achsen x, y und z Referenz ist das Geräte- KOS Die Rota2on wird in rad/s gemessen... und ist gegen den UZS posi2v

Bewegungssensoren Gyroskop verwenden public class GyroActivity extends Activity implements SensorEventListener {! private SensorManager msensormng;! private Sensor mgyrosensor;! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!! msensormng = (SensorManager) getsystemservice(sensor_service);!! mgyrosensor = msensormng.getdefaultsensor(sensor.type_gyroscope);! }! // SensorListener in onresume()/onpause() registrieren/deregistrieren! public void onsensorchanged(sensorevent event) {!! Log.d(TAG, "Gyro(x,y,z) = " + event.values[0] + " "!!!! + event.values[1] + " " + event.values[2]);! }! public void onaccuracychanged(sensor sensor, int accuracy) { /*... */ } }

Bewegungssensoren Verwendung von Gyroskopen Segway Balancierung Gestenerkennung, speziell Drehungen Naviga2on: Richtungsänderung Kamera: Bildstabilisator

Bewegungssensoren Rota2onsvektor Der Rota2onsvektorsensor erzeugt als Messwert einen 3- dimensionalen Vektor, der die Orien2erung des Gerätes rela2v zum Weltkoordinatensystem angibt Die Vektorelemente sind einheitslos

Bewegungssensoren Das Koordinatensystem X: Vektorprodukt von Y x Z, tangen2al zur Erdoberfläche Y: zeigt zum geomagne2schen Nordpol, tangen2al zur Erdoberfläche Z: zeigt in den Himmel, steht senkrecht auf der Erdoberfläche Bildquelle: http://developer.android.com/images/axis_globe.png

Bewegungssensoren Rota2onsvektorsensor nutzen public class RotationActivity extends Activity implements SensorEventListener {! private SensorManager msensormanager; private Sensor mrotationsensor; private final float[] mrotationmatrix = new float[16]; } protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); // Instanz von SensorManageer und rotation sensor holen msensormanager = (SensorManager)getSystemService(SENSOR_SERVICE); mrotationsensor = msensormanager.getdefaultsensor( Sensor.TYPE_ROTATION_VECTOR); } public void onsensorchanged(sensorevent event) { // Erzeugung einer Rotationsmatrix aus dem Rotationsvektor SensorManager.getRotationMatrixFromVector( mrotationmatrix, event.values); // Rotationsmatrix verwenden, um z. B. einen Würfel zu drehen } public void onaccuracychanged(sensor sensor, int accuracy) { }

Bewegungssensoren Rota2onsvektorsensor nutzen siehe Live Präsenta2on

Posi<onssensoren

Posi<onssensoren Enkernungssensor (Proximity Sensor) misst, wie weit ein Objekt vom mobilen Gerät enkernt ist wird i.d.r. verwendet, um zu messen, wie weit der Kopf vom Telefon enkernt ist gibt die Enkernung in cm an, oder binäre Angaben, wie nah oder fern

Posi<onssensoren Enkernungssensor verwenden public class ProximityActivity extends Activity!! implements SensorEventListener {! private SensorManager msensormng;! private Sensor mproxsensor;! public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); msensormng = (SensorManager) getsystemservice(sensor_service); mproxsensor = msensormng.getdefaultsensor(sensor.type_proximity); }!! // SensorEventListener in onresume() und onpause() (de)registrieren!! public void onsensorchanged(sensorevent event) {!! Log.d(TAG, "Proximity: " + event.values[0]);! } }

Posi<onssensoren Magnekeldsensor misst die Stärke des Erdmagnekeldes in drei Dimensionen Der Sensor produziert Werte in µt (magne2sche Flussdichte) Normalerweise wird der Sensor nicht direkt verwendet, sondern dient als Basis für SoKwaresensoren

Posi<onssensoren Magnekeldsensor verwenden public class MagneticActivity extends Activity!! implements SensorEventListener {! private SensorManager msensormng;! private Sensor mmagneticsensor;! public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); msensormng = (SensorManager) getsystemservice(sensor_service); mmagneticsensor = msensormng.getdefaultsensor(!!! Sensor.TYPE_MAGNETIC_FIELD); }!! // SensorEventListener in onresume() und onpause() (de)registrieren!! public void onsensorchanged(sensorevent event) {!!! Log.d(TAG, "Magnetic Field = " + event.values[0] + " " +!!!! event.values[1] + " " + event.values[2]);! } }

Posi<onssensoren Orien2erungssensor... misst die Orien2erung des Gerätes rela2v zum Weltkoordinatensystem SoKwaresensor, der den Magnekeld- Sensor und den Beschleunigungssensor verwendet Messwerte sind Azimuth, Pitch und Roll (Einheit ist )

Posi<onssensoren Azimuth (Yaw), Pitch, Roll Bildquelle: http://upload.wikimedia.org/wikipedia/commons/7/7e/rollpitchyawplain.png

Posi<onssensoren Azimuth: Rota2on um die z- Achse Winkel zwischen der y- Achse des Gerätes und magne2schem Nordpol Beispiel: Richtung der y-achse Wert Nord 0 Süd 180 Ost 90 West 270

Posi<onssensoren Pitch: Rota2on um die x- Achse Vorwärtsneigung des Gerätes Wertebereich: - 180-180 0-90 90-180 180

Posi<onssensoren 0-90 Roll: Rota2on um die y- Achse seitliche Rota2on des Gerätes Wertebereich: - 90-90 0 - -90

Posi<onssensoren Orien2erungssensor verwenden public class OrientationActivity extends Activity!! implements SensorEventListener {! private SensorManager msensormng; private Sensor orientationsensor; public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); msensormng = (SensorManager) getsystemservice(sensor_service); orientationsensor = msensormng.getdefaultsensor(sensor.type_orientation); } // Listener in onresume()/onpause() registrieren/deregistrieren public void onsensorchanged(sensorevent event) {!! Log.d(TAG, String.format("Azimuth=%.2f, Pitch=%.2f, Roll=%.2f",!!!! event.values[0], event.values[1], event.values[2])); } public void onaccuracychanged(sensor sensor, int accuracy) { /*... */ } }

Posi<onssensoren Seit Android 2.2 ist der Orien2erungssensor deprecated Es sollten daher die SensorManager- Methoden getrotationmatrix() und getorientation() verwendet werden

Posi<onssensoren Vorgehensweise: Registrierung eines Listeners für den Beschleunigungs- und Magnekeldsensor SensorEvent- Werte zwischenspeichern getrotationmatrix() mit den gespeicherten Werten aufrufen und Rota2onsmatrix erhalten

Posi<onssensoren Vorgehensweise: eigenen Vektor ini2alisieren Vektor mit getorientation() ausrichten Vektorelemente sind im Gegensatz zum Orien2erungssensor in rad und nicht in

Posi<onssensoren public class Orientation2Activity extends Activity!! implements SensorEventListener {!! // Zwischenspeicher für Magnetfeldwerte! private float[] mmagneticfield = new float[]{0, 0, 0};! // Zwischenspeicher für Beschleunigungswerte! private float[] macceleration = new float[]{0, 0, 0};!! public void onsensorchanged(sensorevent event) {!! switch (event.sensor.gettype()) {!!! case Sensor.TYPE_ACCELEROMETER: {!!!! // Beschleunigungswerte kopieren!!!! macceleration = event.values.clone(); break;!!! }!!! case Sensor.TYPE_MAGNETIC_FIELD: {!!!! // Magnetfeldwerte kopieren!!!! mmagneticfield = event.values.clone(); break;!!! }!! }!! //... Rotationsmatrix und Orientierungsvektor erzeugen!!! } }

Posi<onssensoren public class Orientation2Activity extends Activity!! implements SensorEventListener {!! public void onsensorchanged(sensorevent event) {!! //... Sensorwerte zwischenspeichern!! float[] rotation = new float[9]; // Ziel-Array für Rotationsmatrix!! // Rotationsmatrix erzeugen!! boolean success = SensorManager.getRotationMatrix(!!!! rotation, null, macceleration, mmagneticfield);!! if (success) {!!! float[] vector = new float[3]; // Orientierungsvektor!!! // Vektor aus Rotationsmatrix erzeugen!!! SensorManager.getOrientation(rotation, vector);!!!!!!! Log.d(TAG, String.format("Orientierung: %.2f %.2f %.2f",!!!!! Math.toDegrees(vector[0]),!!!!! Math.toDegrees(vector[1]),!!!!! Math.toDegrees(vector[2])));!! }! } }

Umweltsensoren

Umweltsensoren Android unterstütz verschiedene Sensoren, mit denen sich physikalische Größen aus der Umwelt messen lassen Temperatur Licht LuKdruck LuKfeuch2gkeit

Umweltsensoren Die Registrierung und Deregistrierung von SensorEventListenern erfolgt ebenso wie bei Posi2ons- und Bewegungssensoren Die Messwerte sind im Gegensatz zu Posi2ons- und Bewegungssensoren eindimensional

Umweltsensoren Sensorwerte Sensor Eiheit Daten AMBIENT_TEMPERATURE C Lufttemperatur LIGHT lx Lichtstärke PRESSURE mbar Luftdruck RELATIVE_HUMIDITY % Luftfeuchtigkeit

GPS und Maps

GPS und Maps GPS Informa2onen können über den Loca2onManager ausgelesen werden Um die Standor2nforma2onen nutzen zu können wird die folgende Berech2gung benö2gt <uses-permission android:name=!! "android.permission.access_fine_location" />

GPS und Maps Loca2onManager verwenden public class LocationActivity extends Activity {! private LocationManager locationmng;! private LocationProvider gpsprovider;! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!! setcontentview(r.layout.activity_location);!!!! // LocationManger abrufen!! locationmng = (LocationManager) getsystemservice(location_service);!! // Location Provider für GPS holen!! gpsprovider = locationmng.getprovider(locationmanager.gps_provider);!! // Prüfen, ob GPS eingeschaltet ist!! if (! locationmng.isproviderenabled(locationmanager.gps_provider)) {!!! startlocationsettings();!! } else {!!! // Benutzer informieren, dass er GPS einschalten soll!! }! } }

GPS und Maps Loca2onListener registrieren public class LocationActivity extends Activity {! private LocationManager locationmng;! private LocationProvider gpsprovider;! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!! setcontentview(r.layout.activity_location);!!!! // LocationManger abrufen, GPSProvider setzen, Verfügbarkeit prüfen!! //...!!!! // Listener für location updates registrieren!! locationmng.requestlocationupdates(locationmanager.gps_provider,!!!! 1, // mimimale Zeitspanne zwischen zwei updates!!!! 1, // mimimale Distanz zwischen zwei updates!!!! new MyLocationListener());! } }

GPS und Maps Loca2onListener implemen2eren private class MyLocationListener implements LocationListener {! // Wird aufgerufen, wenn es neue Positionsinformationen gibt! @Override! public void onlocationchanged(location loc) {!! Log.d(TAG, "Position: " + loc.getlatitude() + " " +!!!!! loc.getlongitude() + " " + loc.getaltitude());! }! // auf Sensoränderungen reagieren! @Override! public void onproviderdisabled(string provider) {}! @Override! public void onproviderenabled(string provider) {}! @Override! public void onstatuschanged(!!! String provider, int status, Bundle extras) {}!! }

GPS und Maps Maps API Die Maps API ermöglicht die Darstellung von Google Maps in der eigenen App Sie wird über die Google APIs bereitgestellt Um die Google APIs zu verwenden, müssen die Projekteinstellungen und das Manifest angepasst werden

GPS und Maps Google APIs verwenden

GPS und Maps Manifest Anpassung <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.htwds.emrolab.mada.sensors" android:versioncode="1" android:versionname="1.0" > <uses-permission!!!!!!!!! android:name="android.permission.access_fine_location" /> <application android:allowbackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name"> <uses-library android:name="com.google.android.maps" />! </application> </manifest>

GPS und Maps Die Google API enthält eine MapView, die die eigentliche Map darstellt Um die MapView verwenden zu können wird ein API Key benö2gt Wie der API Key erstellt wird, kann nachgelesen werden unter: hsps://developers.google.com/maps/ documenta2on/android/v1/mapkey

GPS und Maps MapView Layout Eintrag <RelativeLayout xmlns:android="..." xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".locationactivity" > <com.google.android.maps.mapview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:apikey=" --- hier kommt der API Key rein ---" android:clickable="true" > </com.google.android.maps.mapview> </RelativeLayout>

GPS und Maps MapView Implemen2erung public class LocationActivity extends MapActivity {! @Override! protected void oncreate(bundle savedinstancestate) {!! super.oncreate(savedinstancestate);!! setcontentview(r.layout.activity_location);!!!! // Referenz auf die MapView holen!! MapView view = (MapView) findviewbyid(r.id.mapview);!! // Zoom Level und andere Eigenschaften setzen!! view.getcontroller().setzoom(12);!! view.getcontroller().setcenter(new GeoPoint(49235737, 6975717));!! // Eigene Overlays hinzufügen!! view.getoverlays().add(new MyOverlay());!! //.. geopoint mit location Informationen aktualisieren! } }

GPS und Maps Eigene Overlays private class MyOverlay extends Overlay {! @Override! public void draw(canvas canvas,!! MapView mapview, boolean shadow) {!! super.draw(canvas, mapview, shadow);!!!!!! Point point = new Point();!! mapview.getprojection()!!!.topixels(geopoint, point);!! Paint paint = new Paint();!! paint.setcolor(color.red);!! canvas.drawcircle(point.x, point.y,!!! 20, paint);! } }

Literatur I. Mark L. Murphy: The Busy Coder s Guide To Android Development, Version 4.3, 2012 II. Thomas Künneth: Android 3 - Apps entwickeln mit dem Android SDK Galileo Press, 2011 III. http://developer.android.com/guide/topics/ sensors/index.html