Programmierung mobiler Geräte

Ähnliche Dokumente
Android GUI Entwicklung

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

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

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Abamsoft Finos im Zusammenspiel mit shop to date von DATA BECKER

4D Server v12 64-bit Version BETA VERSION

Smartphone Entwicklung mit Android und Java

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Einführung in Android. 9. Dezember 2014

FritzCall.CoCPit Schnelleinrichtung

SEMINARVORTRAG ANDROID ENTWICKLUNG ETIENNE KÖRNER EMBEDDED SYSTEMS SS HSRM

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

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

ANDROID. Analyse der Android Plattform. Andre Rein, Johannes Florian Tietje. 28. Oktober FH-Gieÿen-Friedberg Android Praktikum

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Step by Step Webserver unter Windows Server von Christian Bartl

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

App Entwicklung mit dem Android SDK

s zu Hause lesen

Second Steps in eport 2.0 So ordern Sie Credits und Berichte

Das Modul Hilfsmittel ermöglicht den Anwender die Verwaltung der internen Nachrichten, Notizen, Kontakte, Aufgaben und Termine.

Bauteilattribute als Sachdaten anzeigen

>> Hallo mobile Welt << Einstieg in die Android-App-Programmierung

Einrichten des IIS für VDF WebApp. Einrichten des IIS (Internet Information Server) zur Verwendung von Visual DataFlex Web Applications

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Anleitung zur Nutzung des SharePort Utility

" -Adresse": Geben Sie hier bitte die vorher eingerichtete Adresse ein.

Übung: Verwendung von Java-Threads

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Bedienungsanleitung für den SecureCourier

Adminer: Installationsanleitung

HANDBUCH ZUR AKTIVIERUNG UND NUTZUNG DER HANDY-SIGNATUR APP

Online Newsletter III

CADEMIA: Einrichtung Ihres Computers unter Windows

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Mobile App Development. - Alarm -

Installation des Authorware Webplayers für den Internet Explorer unter Windows Vista

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

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

Version 0.3. Installation von MinGW und Eclipse CDT

Software-Engineering und Optimierungsanwendungen in der Thermodynamik

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2

Es sollte die MS-DOS Eingabeaufforderung starten. Geben Sie nun den Befehl javac ein.

Netzwerk einrichten unter Windows

Synchronisations- Assistent

1 Dokumentenmanagement

iphone-kontakte zu Exchange übertragen

ÖKB Steiermark Schulungsunterlagen

S TAND N OVEMBE R 2012 HANDBUCH DUDLE.ELK-WUE.DE T E R M I N A B S P R A C H E N I N D E R L A N D E S K I R C H E

In 12 Schritten zum mobilen PC mit Paragon Drive Copy 11 und Microsoft Windows Virtual PC

Windows 8.1. Grundkurs kompakt. Markus Krimm, Peter Wies 1. Ausgabe, Januar inkl. zusätzlichem Übungsanhang K-W81-G-UA

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

DOKUMENTATION VOGELZUCHT 2015 PLUS

Newsletter. 1 Erzbistum Köln Newsletter

! " # $ " % & Nicki Wruck worldwidewruck

Tapps mit XP-Mode unter Windows 7 64 bit (V2.0)

Web-Kürzel. Krishna Tateneni Yves Arrouye Deutsche Übersetzung: Stefan Winter

schooltas offline Modus mit der Google Chrome App

TELIS FINANZ Login App

CADEMIA: Einrichtung Ihres Computers unter Linux mit Oracle-Java

SANDBOXIE konfigurieren

Herzlich Willkommen bei der nfon GmbH

Zugriff auf die elektronischen Datenbanken

Computeria Solothurn

Wichtige Hinweise zu den neuen Orientierungshilfen der Architekten-/Objektplanerverträge

Starten der Software unter Windows 7

In 15 einfachen Schritten zum mobilen PC mit Paragon Drive Copy 10 und Microsoft Windows Virtual PC

Installation einer C++ Entwicklungsumgebung unter Windows --- TDM-GCC und Eclipse installieren

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Windows 10. Vortrag am Fleckenherbst Bürgertreff Neuhausen.

1. Einschränkung für Mac-User ohne Office Dokumente hochladen, teilen und bearbeiten

Ihr CMS für die eigene Facebook Page - 1

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Enigmail Konfiguration

Kurzeinführung Excel2App. Version 1.0.0

Diese Kurzanleitung beschreibt die nötigen Einstellungen, um mit pixafe Transfer Bilder auf einem Facebook Konto veröffentlichen zu können.

FTP-Server einrichten mit automatischem Datenupload für

Windows / Mac User können sich unter folgenden Links die neueste Version des Citrix Receiver downloaden.

Grundlagen von Python

Artikel Schnittstelle über CSV

Entwickeln für Android OS

Installieren und Verwenden von Document Distributor

Pflichtenheft. CDIX-Roles. Erweiterung des CDIX Berechtigungssystems. Autor : CD Software GmbH. Copyright CD Software GmbH Version:

Übungen zur Softwaretechnik

OpenVPN unter Linux mit KVpnc Stand: 16. Mai 2013

2. Einrichtung der ODBC-Schnittstelle aus orgamax (für 32-bit-Anwendungen)

Tevalo Handbuch v 1.1 vom

2. Hintergrundverarbeitung in Android: Services und Notifications

Informatik Kurs Simulation. Hilfe für den Consideo Modeler

Verwendung des Terminalservers der MUG

2 DAS BETRIEBSSYSTEM. 2.1 Wozu dient das Betriebssystem. 2.2 Die Bildschirmoberfläche (Desktop) Themen in diesem Kapitel: Das Betriebssystem

Installation von NetBeans inkl. Glassfish Anwendungs-Server

Sich einen eigenen Blog anzulegen, ist gar nicht so schwer. Es gibt verschiedene Anbieter. ist einer davon.

Bitte beachten Sie. Nur für Kabelmodem! - 1 -

versand mit Microsoft Outlook bzw. Mozilla Thunderbird

Transkript:

Programmierung mobiler Geräte SoSe 2015 Native Entwicklung mit Android Einführung Markus Berg Hochschule Wismar Fakultät für Ingenieurwissenschaften Bereich Elektrotechnik und Informatik http://mmberg.net

2 Status Quo WebApps Hybride Apps Zugriff auf Gerätefunktionen Allerdings geringere Performance Kein natives Look & Feel Webtechnologien Erschwerte Fehlersuche (kein Compiler) Keine Codevervollständigung Läuft auf allen Plattformen Keine Anpassungen für verschiedene Geräte/ Betriebssysteme notwendig

3 Native Apps Werden in der Programmiersprache des Zielgerätes programmiert Windows C# ios Objective C Android Java An die Zielplattform angepasst und optimiert

4 Ziel für heute Einführung in die Android Systemarchitektur Überblick über die Komponenten einer Android- Anwendung Programmieren einer ersten kleinen App

5 Android Fokus auf Smartphones und Tablets 2003: Aufgekauft von Google 2008: erstes Release Aktuelle Version: 5.1 (Lollipop) Basiert auf Linux-Kernel Speicherverwaltung Prozessverwaltung Kommunikation/Netzwerk/Multimedia Gerätetreiber

6 Dalvik / Android Runtime Laufzeitumgebung (Java Virtual Machine) Ähnelt der Java SE JVM Führt ebenfalls Bytecode aus Jedoch inkompatibler Bytecode (Dex-Bytecode), d.h. normale Java-Programme laufen nicht auf Dalvik und umgekehrt Java-Quellcode Java-Bytecode Dex-Bytecode Unterschiedliche Prozessorarchitektur Bis 2014: Dalvik Virtual Machine Just-in-time-Compiler 2014 ersetzt durch Android Runtime (ART) Führt identischen Bytecode aus Ahead-of-time-Compiler (wie schon zu C-Zeiten) Nicht mehr plattformunabhängig Bessere Garbage Collection Jede Anwendung läuft in eigener VM

7 Android Modular aufgebaut Sämtliche Anwendungen können ausgetauscht werden Inkl. SMS-App, Telefon-App Ausnahme: die virtuelle Maschine und das Basissystem selbst Ressourcenbegrenzte Umgebung CPU, RAM, Akku Daher optimierte Laufzeitumgebung

8 Systemarchitektur von Android Verschiedene Ebenen Low-Level (Betriebssystemebene; Kernel) bis High-Level (Applications) Kernel System-Bibliotheken Nativ (C/C++) Android Runtime Mit Core-Libraries (Java) Android Framework Java Nutzbar durch Apps Apps (d.h. die Standardanwendungen) http://www.tutorialspoint.com/android/images/android_architecture.jpg

9 Kernel Speicher-/Prozessmanagement Security Dateizugriff Netzwerkzugriff Treiber Powermanagement Interprozesskommunikation (IPC)

10 Libraries & Runtime Displayzugriff WebKIT (Browser) OpenGL In-Memory Database Runtime (ART/Dalvik) Virtuelle Maschine Core-Java-Bibliotheken Datenstrukturen Dateizugriff Lebenszyklus...

11 Application Framework Zur Nutzung durch die Anwendungen Window Manager Verwalten und Darstellen von Menüs, Dialogen, Notification Bar bzw. Hauptfenster einer Anwendung View System UI-Objekte: Darstellen von Icons, Buttons Package Manager Übersicht aller installierten Anwendungen Activity-Manager... Verwaltung des Lebenszyklus einer Anwendung Navigationsstack

12 Applications Built-in Apps Browser Mailprogramm SMS...

13 Entwicklung: SDK & IDE SDK Zum Entwickeln von Android-Apps Plattform-Bibliotheken Tools/Entwicklungswerkzeuge Dokumentation Systemimages für Emulator IDE Früher: Eclipse mit ADT Plugin Seit Ende 2014: Android Studio Basiert auf IntelliJ (Haben wir bereits installiert)

14 Emulator Zum Emulieren von verschiedenen Android Geräten z.b. Tests verschiedener Bildschirmgrößen ohne Geräte kaufen zu müssen z.b. Tests von verschiedenen Android Versionen z.b. Simulation von Gerätevenents (low battery, new message) oder Zuständen (Geokoordinaten, langsame Internetverbindung) Somit essentiell zur Entwicklung Ersetzt jedoch nicht den Test auf ausgewählten echten Geräten (Emulator emuliert nicht alle Funktionalitäten, z.b. Bluetooth) Größter Nachteil: Langsam! Auf modernen Prozessoren Hardwarebeschleunigung aktivieren (Intel HAXM) Alternative: Genymotion Sgn. Virtuelle Geräte (Virtual Devices, AVD) Konfigurierbar Bestimmte Hardware CPU, RAM, Displaygröße Bestimmte Androidversion Verwaltet über AVD Manager

15 AVD einrichten Android Virtual Device Manager starten Neues Gerät anlegen (bzw. starten falls schon angelegt) Wenn kein HAXM verfügbar (z.b. bei Core2Duo), Gerät mit ARM anlegen, sonst x86 (z.b. i5, i7)

16 Emulator steuern Emulator (bzw. AVD) starten (dauert u.u. sehr lange) Verbinden per Telnet Port in Titelzeile des Emulators sichtbar Standard: 5554, d.h. telnet localhost 5554 Mögliche Befehle: power capacity 50 sms send 0173123123 Guten Tag! network speed (edge full) geo fix 53.889910 11.446331

17 Emulator steuern

18 Wie immer: Moin Wismar! Ziel: Eine App, die den Text Moin Wismar! anzeigt Und schrittweise Erweiterung um ein User Interface Doch zunächst etwas Theorie...

19 Applikationslayout: Komponenten Grundlegende Einheit einer App Legt Zweck und Einstiegspunkt (User, Event,...) fest Activities http://developer.android.com/guide/components/fundamentals.html GUI Userinteraktion mit der App Services Langlaufende Prozess im Hintergrund Kein Userinterface z.b. Musik abspielen obwohl andere App im Vordergrund Broadcast Receivers Reagieren auf Geräteevents, d.h. Subscriber von Events (bzw. sgn. Intents) z.b. Empfang einer SMS Content Providers Daten speichern und zwischen Apps teilen

20 Komponente: Activity Repräsentiert eine bestimmte Aktivität, die der Anwender nutzen kann Zeigt Daten an und reagiert auf Eingaben Graphical User Interface (GUI) Einzelner Screen mit User Interface Vergleichbar mit einem Fenster einer Desktopanwendung Form (C#) oder JFrame (Java Swing) z.b. neue Notiz anlegen oder Kontakt aus Telefonbuch auswählen Oder selbst das Anzeigen von Moin Wismar! App kann aus mehreren Activities bestehen z.b. E-Mail-App: Liste der Mails anzeigen, Mail lesen, Mail schreiben Activities können unabhängig aufgerufen werden, z.b. Klick auf Mailadresse im Browser öffnet Activity Mail schreiben der E-Mail- App Aufruf von Activities geschieht über Intents (es gibt keine main()-funktion)

21 Vorteil von Activities Vermeiden von Redundanzen Wiederverwendung über Applikationsgrenzen hinaus Um ein Foto per Mail zu verschicken, muss im Mailprogramm keine Fotofunktion eingebaut werden Mailprogramm ruft Kamera-App auf und nimmt Foto entgegen User merkt nicht, dass er zwei Apps genutzt hat Setzt voraus, dass Activities einheitlich designed sind Wenn User verschiedene Kamera-Apps hat, wird er aufgefordert eine auszuwählen

22 Intents Aktivitäten werden über asynchrone Nachrichten aufgerufen (Intents) Dies kann über Applikationsgrenzen hinaus passieren Nachricht kann eine Activity aktivieren Explicit Intent: URL mit Chrome anzeigen, GMail Implicit Intent: URL anzeigen, Mail schreiben, Bild anzeigen,... D.h. view or send something (URI) Wenn mehrer Anwendungen diese Funktionalität besitzen, wird der Nutzer gefragt welche er nutzen möchte Wir erinnern uns an die share-funktion des letzten Praktikums

23 Manifest Alle Komponenten müssen der App im Manifest bekannt gemacht werden Darüber hinaus können hier Berechtigungen erteilt werden (z.b. ob die App auf s Internet zugreifen darf) Intent Filters: Deklaration welche Funktionalitäten (auf Activity- Ebene) von anderen Apps aufgerufen werden können Ich kann Bilder anzeigen Minimal erforderliche Version der Android API Weitere Anforderungen (uses-feature) z.b. Kamera Icon der App

24 Ressourcen Android Applikationen bestehen aus mehr als nur Quelltext Sgn. Ressourcen Layout-Files Bilder Texte (Strings) Vorteile Anpassen der Anwendung ohne Quelltext ändern zu müssen (z.b. Übersetzen in andere Sprache) Verschiedene Layouts für verschiedene Displaygrößen http://developer.android.com/guide/topics/resources/overview.html

25 Layout Definiert die visuelle Struktur Zwei Möglichkeiten In XML deklarieren (empfohlen) Im Quelltext deklarieren und zur Laufzeit instanziieren Mischung möglich: in XML deklarieren und zur Laufzeit verändern Vorteil XML: Trennung von Präsentation und Verhalten Schlankerer Code Leichte Anpassung des Layouts ohne Quelltext zu ändern Somit kein Neukompilieren erforderlich Layoutdefinitionen sind Ressourcen und somit im Ordner /res/layout/ Mehr Details: http://developer.android.com/guide/topics/ui/declaringlayout.html

26 Layouts Linear Layout Alle Kinder werden in einer Richtung ausgerichtet Vertikal oder horizontal D.h. eine Zeile oder eine Spalte Relative Layout Position wird relativ zu anderen Elementen angegeben z.b. Unter X und links neben Y List View Stellt eine scrollbare Liste dar Dynamischer Inhalt: Automatisch aus Array oder anderer Quelle befüllbar Performanter als Linear Layout (nur aktuell sichtbare Items werden geladen, nicht alle 100 einer Liste wenn nur 10 gleichzeitig sichtbar sind) Grid View Zweidimensionales Raster Ebenfalls dynamisch und performant

27 Projektstruktur manifests androidmanifest.xml java net.mmberg.myapp MainActivity.java Manifest Quellcode Packages mit Java-Klassen res drawable values strings.xml Layout activity_main.xml... Ressourcen Icons, Strings, Layouts

28 Android API: Ein Blick in den Quelltext Android ist OpenSource Quelltext der API ist einsehbar z.b. Quelltext der Activity-Klasse die Grundlage für alle Activities ist Auch die Apps und deren Komponenten sind zugreifbar z.b. Alarm Clock SetAlarm (Activity) https://android.googlesource.com/platform/packages/apps/ AlarmClock/+/062d863a156a3564a839ab5a718f31500298635f/src/ com/android/alarmclock/setalarm.java AlarmReceiver (BroadcastReceiver) AlarmProvider (ContentProvider)

29 Überblick / Zusammenfassung Android-Projekt Quelltext (Java-Klassen) Activities Activity1 Aufruf über Intents Activity2 (Services, BroadcastReceivers, ContentProviders) Ressourcen Grafiken Strings... Manifest Liste der Komponenten Berechtigungen Minimale Anforderungen Verwendete Bibliotheken Android API...

30 Übung: Moin Wismar Neues Projekt Projektname: MoinWismar API 16 Blank Activity Default-Werte übernehmen Details: http://developer.android.com/training/basics/firstapp/ creating-project.html

31 Projekt Manifest Java-Klassen Package Activity Ressourcen Grafiken (Icons,..) Layout (XML) Strings Build-Skripte

32 Layout Öffnen der activity_main.xml Design-Ansicht (Tab ganz unten) Wir sehen bereits eine Textview mit dem Inhalt Hello world! Wechseln in Textansicht <RelativeLayout...> <TextView android:text="@string/hello_world" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> Relatives Layout, d.h. Positionierung in Abhängigkeit von anderen Elementen TextView: stellt einen Text dar Inhalt kommt aus Ressourcen-Datei Verweise über @ Größe passt sich an den Inhalt an

33 String-Ressourcen @string/hello_world verweist auf Datei /res/values/ strings.xml <resources> <string name="app_name">moinwismar</string> <string name="hello_world">hello world!</string> <string name="action_settings">settings</string> </resources>

34 MainActivity Öffnen der MainActivity.java oncreate ist der Einstiegspunkt für die Activity (mehr Details später) Hier wird das Layout geladen @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); } Zugriff auf Ressourcen aus Java über R-Klasse

35 Starten der Anwendung Mit dem Emulator Wenn noch nicht geschehen, AVD einrichten (sollte bereits im letzten Praktikum erfolgt sein) Auf Run klicken und AVD auswählen, falls mehrere eingerichtet sein sollten

36 Starten der Anwendung Auf dem Gerät Unter Windows müssen erst Treiber installiert werden http://developer.android.com/tools/extras/oem-usb.html USB-Debugging auf dem Smartphone aktivieren Smartphone mit PC verbinden In Android Studio auf Run klicken und Gerät aus der Liste der verbundenen Geräte auswählen

37 Anpassen der Beispielanwendung In Anlehnung an http://developer.android.com/training/basics/firstapp/ building-ui.html Wir starten von Null und entfernen das vorhandene Layout bzw. ersetzen das relative Layout durch ein Lineares Anpassung von activity_main.xml in /res/layout Höhe und Breite sind Pflichtangaben. Die Größe soll sich am Elternelement ausrichten Layout soll horizontal sein, d.h. Elemente sollen waagerecht nebeneinander angeordnet werden <LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android"> </LinearLayout>

38 Textfeld hinzufügen Wir benötigen ein Eingabeelement: EditText ID: eindeutiger Indentifizierer um aus Java-Quellcode und aus XML- Ressourcen-Dateien Zugriff auf das Element erhalten zu können @ leitet eine Referenz aus XML heraus ein + wird benötigt, wenn eine Ressource das erste Mal definiert wird Breite: statt absoluter Angabe so groß wie der Inhalt: wrap_content Höhe: dito Hint (vorausgefüllter Text wenn Nutzer noch nichts eingegeben hat) Verweis auf String aus /res/values/strings.xml <LinearLayout...> <EditText android:id="@+id/edit1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit1_hint"/> </LinearLayout> <string name="edit1_hint"> Name </string> strings.xml

39 Button hinzufügen Wir ergänzen im linearen Layout einen Button Größe soll sich wieder an Inhalt anpassen Anzuzeigender Text wird wieder über String-Ressource definiert Aufschrift Senden Attribut android:text <Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send_text"/> Optional, da wir später im Quellcode nicht darauf referenzieren An welcher Stelle werden die beiden Elemente vermutlich positioniert?

40 Layout testen App ausführen Platz nicht optimal genutzt Eingabefeld sehr klein Lösung: Weights Relativer Anteil an Gesamtgröße in Bezug auf Elternelement Ein Element mit der Weight 3 und eins mit der Weight 1 (Summe 4) führt zu einer Größe von ¾ bzw. ¼. <EditText android:id="@+id/edit1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit1_hint" android:layout_weight="2"/> EditText (mit Weight von 2) doppelt so groß wie Button (mit einer Weight von 1) ABER: Button größer als nötig, da er nun 1/3 fix einnimmt Überprüfen in Vorschau

41 Layout anpassen Standardweight ist 0 Element ist dann so groß wie es mindestens sein muss, um den Inhalt darzustellen Wenn nun ein anderes Element einen Wert > 0 hat, nimmt es den kompletten noch freien Platz ein Weight von Button entfernen bzw. auf 0 setzen Weight von EditText auf 1 setzen Zur Performanceoptimierung wird empfohlen die Breitenangaben auf 0dp zu setzen (für Elemente, die Weights nutzen), da die Berechnung für wrap_content etc. überflüssig ist

42 Button zum Leben erwecken Ziel: Bei Buttonklick soll ein Text ausgegeben werden Auf Buttonklick reagieren über onclick-event Dieses wird in Layoutdatei definiert Angabe der Methode, die beim Klick aufgerufen wird <Button android:id="@+id/button_send" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button_send_text" android:layout_weight="0" android:onclick="sendmessage"/> Diese Methode muss nun in der Activity definiert werden

43 OnClick-Methode Wird im Java-Code definiert Muss exakt so heißen wie im XML-File angegeben Darüber hinaus: public Rückgabetyp void 1 Parameter vom Typ View View-Klasse importieren (import android.view.view;) public void sendmessage(view view){ } Toast toast = Toast.makeText(this, Hallo, Toast.LENGTH_SHORT); toast.show(); Toast: kurzes Einblenden eines Textes Diese Methode wird aufgerufen, wenn der Button geklickt wird Der View-Parameter referenziert das angeklickte Objekt, d.h. den Button

44 Zweite Activity Bis jetzt haben wir nur eine Activity Beim Buttonklick soll nun statt des Textes eine zweite Activity angezeigt werden, die den Inhalt des Textfeldes der ersten Activity darstellt Zunächst erzeugen einer Activity, die beim Buttonklick aufgerufen werden soll Rechte Maustaste auf Projekt und Blank Activity hinzufügen Name: SecondActivity Als Hierarchical Parent MainActivity auswählen Sonst Standardwerte übernehmen LayoutName: activity_second... Java-Klasse und Ressourcendateien werden angelegt und Manifest wird aktualisiert Layout enthält wieder eine TextView, die Hello world! anzeigt

45 Intent Nachricht zum Aufrufen der zweiten Activity (expliziter Intent) notwendig In der sendmessage-methode, die beim Buttonklick aufgerufen wird, erzeugen wir nun ein Intent (statt des Toasts) Zunächst Intent-Klasse importieren (import android.content.intent;) public void sendmessage(view view){ Intent intent = new Intent(this, SecondActivity.class); startactivity(intent); } Neuen Intent instanziieren Erster Parameter: Context (Meist this, also die aktuelle Instanz selbst. Jede Activity ist vom Typ Context.) Zweiter Parameter: Angabe welche Activity gestartet werden soll startactivity aufrufen mit erzeugtem Intent als Parameter startactivity ist eine Methode der Klasse Activity

46 Ausprobieren Anwendung starten Auf Button klicken Zweite Activity mit dem Text Hello world! sollte angezeigt werden

47 Zugriff auf Daten aus Ressourcen Ziel: Wert von EditText übermitteln Dafür zunächst Text auslesen und später dem Intent hinzufügen Zugriff auf Ressourcen aus Java Über R-Klasse (statt per @ wie in XML-Ressourcen-Dateien) EditText haben wir bereits in Layout-Datei definiert Besitzt eine ID (edit1) findviewbyid liefert eine View zurück Cast erforderlich EditText edittext = (EditText) findviewbyid(r.id.edit1); <LinearLayout...> <EditText android:id="@+id/edit1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/edit1_hint"/> </LinearLayout>

48 Intent mit Daten senden Dem Nachrichtenaufruf können auch Daten hinzugefügt werden In unserem Beispiel: Der Text aus dem Eingabefeld Realisiert über Extras, die dem Intent hinzugefügt werden können Jedes Extra bekommt dabei einen eindeutigen Identifier public final static String EXTRA_MESSAGE = "net.mmberg.editmessage";... public void sendmessage(view view) { Intent intent = new Intent(this, SecondActivity.class); EditText edittext = (EditText) findviewbyid(r.id.edit1); String message = edittext.gettext().tostring(); intent.putextra(extra_message, message); startactivity(intent); }

49 Layout von SecondActivity anpassen Dynamisch im Java-Quellcode statt über XML-Ressourcen-Datei Wir benötigen das in der XML definierte Layout nicht setcontentview(r.layout.activity_second) aus oncreate() entfernen, sodass nicht mehr das Layout aus der Ressourcendatei verwendet wird Stattdessen Layout dynamisch aufbauen, sodass wir den darzustellenden Text zur Laufzeit ermitteln können, statt vordefiniert in Ressourcen: protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); TextView textview = new TextView(this); textview.settextsize(40); String message = "Moin Wismar"; textview.settext(message); setcontentview(textview); } Statt festem String können wir auch die Daten aus dem Intent auslesen: Hinzufügen der TextView zu ContentView. Alternativ vorher Linear Layout erzeugen (analog zu XML). String message = getintent().getstringextra(mainactivity.extra_message);

50 Test Wir haben nun eine App, die aus zwei Activities besteht. In der ersten kann ein Text eingegeben werden, der dann über ein Intent an die zweite Activity übertragen und dort dargestellt wird.

51 Zusammenfassung Android-Quellcode wird in Java geschrieben. Allerdings wird nicht in Standard- Bytecode kompiliert, sondern in eine spezielle Variante, die auf ressourcenarme Geräte optimiert ist und von der Android Runtime ausgeführt wird. Jede Anwendung besitzt ein Manifest, das die grundlegenden Eigenschaften und die verwendeten Activities beschreibt. Activities sind die einzelnen Screens einer Anwendung. Sie stellen das User-Interface dar und erlauben die Interaktion des Nutzers mit der Anwendung. Eine Activity stellt Daten dar und reagiert auf Eingaben. Intents sind Nachrichten, die zum Aufrufen von Aktivitäten genutzt werden. Sie können auch Nutzdaten enthalten, die der aufgerufenen Activity mitgeteilt werden sollen. Layouts können per XML oder dynamisch im Java-Quellcode definiert werden. Strings werden in einer Ressourcendatei definiert, um möglichst einfach Beschreibungen austauschen oder die Anwendung in eine andere Sprache übersetzen zu können.

52 Nächste Woche...... vertiefen wir die Entwicklung mit Android. Lebenszyklus Activity-Hierarchie Speichern von Activity-Zuständen... wird es eine neue Praktikumsaufgabe geben.