Mobile Systeme Android 07.04.2011
Android Plattform/Betriebssystem für mobile Endgeräte wie z.b. Smartphones Basiert auf dem Linux Kernel Bis auf grundlegende Prozesse werden alle Anwenden mithilfe einer speziellen JVM (Dalvik Virtual Machine DVM) ausgeführt -> Plattformunabhängigkeit der Anwendungen Im Vergleich zu Java ME sind fast alle Packages von Java SE enthalten Zusätzlich viele Android eigene APIs Derzeit aktuellste Version Android 3.0 Honeycomb, kaum HW support 2 07.04.2011 Mobile Systeme - Android
Android - Systemarchitektur Quelle: http://developer.android.com/guide/basics/what-is-android.html 3 07.04.2011 Mobile Systeme - Android
Dalvik VM (DVM) Spezielle VM die Register-basiert arbeitet. Dadurch lässt sich der Bytecode effizienter auf Register basierten Prozessoren ausführen. Eignes Format für den Bytecode: Dex-Format Entwicklung mithilfe des Java SE SDKs Java-Bytecode wird übersetzt in Dex (Dateierweiterung.dex) 4 07.04.2011 Mobile Systeme - Android
Typische Smartphones Motorola Milestone 2 CPU ARM Cortex A8 1000 Mhz 512 Mb RAM 8 Gb interner Speicher 3,7 Zoll LCD 854 x 480 Pixel GPS Beschleunigungssensor Temparatursensor Digitaler Kompass 5 07.04.2011 Mobile Systeme - Android
Die erste Anwendung File -> New -> Project Android Project 6 07.04.2011 Mobile Systeme - Android
Ordnerstruktur des generierten Projekts 7 07.04.2011 Mobile Systeme - Android
Erstellen einer neuen Emulator-Konfiguration Windows -> Android SDK and AVD Manager 8 07.04.2011 Mobile Systeme - Android
Erstellen einer neuen Emulator-Konfiguration 9 07.04.2011 Mobile Systeme - Android
Ausführen der Anwendung Über den Run -Button in Eclipse ggf. erscheint die Meldung Run As Hier Android Application auswählen Das AVD startet automatisch Wurde der Emulator gestartet so wird die Anwendung installiert und gestartet Der Emulator braucht für einen erneuten Start nicht geschlossen werden! 10 07.04.2011 Mobile Systeme - Android
Ausführen der Anwendung 11 07.04.2011 Mobile Systeme - Android
Starten auf einem Telefon 1. Telefon einrichten USB-Debugging unter Einstellungen -> Anwendungen -> Entwicklung aktivieren 2. Telefon anschließen 3. Anwendung startet beim nächsten Start automatisch auf dem Telefon 12 07.04.2011 Mobile Systeme - Android
Activity
Activity Einer der Hauptbestandteile einer Anwendung Stellt eine Benutzeroberfläche dar, mit der der Anwender interagiert Eine Anwendung besteht aus beliebig vielen Activities Eine Activity wird als main bezeichnet, diese wird bei Programmstart als erstes angezeigt Alle Activitys laufen eigenständig und sind nur lose miteinander gekoppelt Somit direkter Datenaustausch nicht möglich Eine Activity kann eine andere aufrufen und auch Daten mitgeben 14 07.04.2011 Mobile Systeme - Android
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="init.android.helloworld" android:versioncode="1" android:versionname="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name android:debuggable="true"> <activity android:name=".helloworld android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> </application> <uses-sdk android:minsdkversion="8" /> </manifest> 15 07.04.2011 Mobile Systeme - Android
Benutzerinterface einer Activity Zusammengesetzt aus Views Widgets - Sichtbare Elemente mit denen der Benutzer interagiert Layouts Ordnen Widgets nach einem Layout an Werden in einer beliebigen Baumstruktur angeordnet Die Baumstruktur kann im Quellcode erzeugt werden Üblich ist aber sie in einer XML-Datei zu beschreiben Im Beispiel res/layout/main.xml 16 07.04.2011 Mobile Systeme - Android
main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/textview1" /> </LinearLayout> 17 07.04.2011 Mobile Systeme - Android
HelloWorldActivity.java package de.init.android.helloworld; import android.app.activity; import android.os.bundle; public class HelloWorldActivity extends Activity { /** Called when the activity is first created. */ @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); } } 18 07.04.2011 Mobile Systeme - Android
Die Klasse R Wird automatisch generiert R.layout enthält IDs für die Layouts R.id enthält alle IDs die für andere Views definiert wurden R.drawable enthält alle Bilder aus dem Ordner drawable R.string enthält alle Textresourcen Achtung es werden nur IDs gespeichert über die Referenzen zu den Objekten bezogen werden können! 19 07.04.2011 Mobile Systeme - Android
Zugriff auf Views über eine ID Am Beispiel des TextView aus der HelloWorld Activity TextView in der main.xml um ein android.id -Attribut erweitern: <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" android:id="@+id/textview1" /> + gibt an, dass eine neue ID erzeugt werden soll Beim Speichern wird R automatisch aktualisiert Zugriff im Quellcode: TextView textview1 = (TextView) findviewbyid(r.id.textview1); 20 07.04.2011 Mobile Systeme - Android
Zustände einer Activity Eine Activity kann verschiedene Zustände annehmen Für jeden Zustand kann eine zugehörige Methode überschrieben werden, die bei einem Zustandswechsel aufgerufen werden Quelle: http://developer.android.com/guide/topics/fundamentals/activities.html 21 07.04.2011 Mobile Systeme - Android
Zustände einer Activity Methode Beschreibung Nächster Zustand oncreate() Wird ausgeführt, wenn die Activity erstellt wird. Hier sollten alle Initialisierungen ausgeführt werden. onstart() onrestart() Wird ausgeführt nachdem die Activity gestoppt wurde und wieder ausgeführt wird. Hiernach folgt immer onstart() onstart() onstart() Wird ausgeführt bevor die Activity für den Benutzer sichtbar wird. Es folgt onresume(), wenn die Activity sichtbar wird, oder onstop() wenn die Activity versteckt ist. onresume() oder onstop() onresume() Wird als letzes Aufgerufen, bevor die Activity aktiv wird. onpause() onpause() Wird aufgerufen, wenn das System den Start oder das Fortsetzen einer anderen Activity vorbereitet. onresume() oder onstop() onstop() Wird aufgerufen, wenn die Activity nicht mehr für den Benutzer sichtbar ist. onrestart() oder ondestroy() ondestroy() Wird aufgerufen, bevor die Activity zerstört wird. - Quelle: http://developer.android.com/guide/topics/fundamentals/activities.html 22 07.04.2011 Mobile Systeme - Android
Andere Acticities anzeigen - Intents Beispiel zum Aufruf einer Activity mit dem Namen Activity2 : final Intent intent= new Intent(this,Activity2.class); startactivity(intent); Zusätzlich in der AndroidManifest.xml : <application <activity android:name="activity2"></activity> </application> 23 07.04.2011 Mobile Systeme - Android
Activity Backstack Ruft eine Activity eine andere auf, so wird die alte auf dem Backstack abgelegt. Drückt der Benutzer die Zurücktaste, so wird die vorherige Activity wieder aktiviert. Quelle: http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html 24 07.04.2011 Mobile Systeme - Android
Oberflächenereignisse Reagieren auf Oberflächenereignisse mithilfe eines Listerners Beobachter Aufrufendes Ereignis... button.setonclicklistener( new View.OnClickListener(){ );... } @Override public void onclick(view v){ } View.OnClickListener Klick auf View View.OnKeyListener Tastatureingabe View.onTouchListener TouchScreen Seit API 1.6: xml-attribut: android:onclick android:onclick= shownotification1 In der Activity implementierung der Methode: public void shownotification1(view view) {...} 25 07.04.2011 Mobile Systeme - Android
Toast import android.widget.toast;... Toast.makeText(this,"HelloToast",Toast.LENGTH_SHORT).show(); 26 07.04.2011 Mobile Systeme - Android
Notifications final NotificationManager notificationmanager = NotificationManager) getsystemservice(context.notification_service); Notification notification = new Notification (android.r.drawable.sym_def_app_icon,"hello Notification", System.currentTimeMillis()); Intent notificationintent = new Intent( this, HelloNotificationActivity.class); PendingIntent contentintent = PendingIntent.getActivity( this, 0, notificationintent, 0); notification.setlatesteventinfo(getapplicationcontext(), "Test", "HelloNotification", contentintent); notification.flags = notification.flag_auto_cancel; notificationmanager.notify(notification_id, notification); 27 07.04.2011 Mobile Systeme - Android
Notifications 28 07.04.2011 Mobile Systeme - Android
Aufgaben 1. Erstellen Sie eine Activity die alle Methoden der Zustandsänderung implementiert. Geben Sie für jede Zustandsänderung eine Meldung im Log aus (Log.v). 2. Erstellen Sie eine GUI mit verschiedenen Widgets 3. Erstellen Sie ein Programm, welches beim Drücken auf einen Button ein Toast erstellt. 4. Erstellen Sie ein Programm, welches beim Drücken auf einen Button eine Notification erstellt. 5. Erweitern Sie Ihr Programm um eine weitere Activity, die mittels eines Buttons aufgerufen werden kann. Ausserdem soll es möglich sein von der ursprünglichen Activity Daten vom Typ String an die neue Activity zu übergeben. Beachten Sie den Backstack. 29 07.04.2011 Mobile Systeme - Android
Canvas 1. Erstellen einer eigenen Klasse, abgeleitet von View public class CanvasTestView extends View {...} 2. Überschreiben der Methode ondraw protected void ondraw(canvas canvas) {...} 3. invalidate() veranlasst ein neuzeichnen 30 07.04.2011 Mobile Systeme - Android
Beispiel ondraw() protected void ondraw(canvas canvas) { int height = canvas.getheight(); int width = canvas.getwidth(); Paint paint = new Paint(); paint.setcolor(color.ltgray); canvas.drawrect(0, 0, width, height, paint); } paint.setcolor(color.blue);...... 31 07.04.2011 Mobile Systeme - Android
Touchscreen int x1,y1,x2,y2;... public boolean ontouch(view v, MotionEvent event) { x1=event.getx(); y1=event.gety(); //multitouch: x2=event.getx(1); y2=event.gety(1); invalidate(); } 32 07.04.2011 Mobile Systeme - Android
Sensoren Beispiel Accelerometer private SensorManager msensormanager; private Sensor maccelerometer; public void oncreate(bundle savedinstancestate) {... msensormanager = (SensorManager) getsystemservice(sensor_service); maccelerometer = msensormanager.getdefaultsensor(sensor.type_accelerometer);... } 33 07.04.2011 Mobile Systeme - Android
Sensoren Beispiel Accelerometer protected void onresume() { super.onresume(); msensormanager.registerlistener(this, maccelerometer, SensorManager.SENSOR_DELAY_UI); } protected void onpause() { super.onpause(); msensormanager.unregisterlistener(this); } 34 07.04.2011 Mobile Systeme - Android
Sensoren Beispiel Accelerometer... implements SensorEventListener... public void onsensorchanged(sensorevent event) { x=event.values[0]; y=event.values[1]; z=event.values[2]; } 35 07.04.2011 Mobile Systeme - Android