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