Seminararbeit - Android-App zur Bilddarstellung - RWTH

Werbung
Fachhochschule Aachen
Campus Jülich
Fachbereich 9 – Medizintechnik und Technomathematik
Seminararbeit
im Studiengang Scientific Programming
Android-App zur Bilddarstellung
Eingereicht von
Marco Mix
Matrikel-Nummer: 836746
1. Prüfer: Prof. Dr. rer. nat. Bodo Kraft
2. Prüfer: Rainer Schnitzler
Aachen den 03. Januar 2012
Inhaltsverzeichnis
1. Motivation der Seminararbeit.............................................................................. - 1 2. Android ............................................................................................................... - 2 2.1 Was ist Android? ........................................................................................... - 2 2.2 Architektur von Android................................................................................. - 4 2.2.1 Die Dalvik Virtual Machine...................................................................... - 5 2.2.2 Standardbibliotheken.............................................................................. - 6 2.2.3 Anwendungsrahmen............................................................................... - 6 2.2.4 Anwendungsschicht................................................................................ - 6 2.3 Elemente einer Anwendung .......................................................................... - 7 2.3.1 Android-Komponenten............................................................................ - 7 2.3.2 Activity .................................................................................................... - 8 2.3.2.1 Views ............................................................................................... - 9 2.3.2.2 Layouts ............................................................................................ - 9 2.3.2.3 Menüs ............................................................................................ - 12 2.3.3 Android-Manifest .................................................................................. - 12 3. ZooAppSeminar................................................................................................ - 14 3.1 Activities der Zoo-App ................................................................................. - 14 3.1.1 ZooMainActivity .................................................................................... - 15 3.1.1.1 ImageZoomView ............................................................................ - 16 3.1.2 ZooInfo ................................................................................................. - 16 3.1.3 GehegeListe ......................................................................................... - 17 3.1.4 PinguinInfo ........................................................................................... - 18 3.1.5 PinguinGallery ...................................................................................... - 18 3.2 Navigation der Zoo-App .............................................................................. - 19 4. Fazit.................................................................................................................. - 23 5. Literaturverzeichnis........................................................................................... - 24 6. Abbildungsverzeichnis ...................................................................................... - 25 7. Eidesstattliche Erklärung .................................................................................. - 26 -
1. Motivation der Seminararbeit
In Zoos und Tierparks kann es leicht passieren, dass man sich nicht entscheiden
kann, welchen Weg man nehmen soll. Will man zuerst zum Affengehege oder doch
lieber zu den Elefanten? Und was wäre eine gute Route, um möglichst alle Gehege
zu Gesicht zu bekommen? Natürlich kann man auf Übersichtstafeln oder Flyer
zurückgreifen. Diese sind jedoch in vielen Zoos nur spärlich angebracht und
enthalten keine detaillierten Informationen über die einzelnen Gehege.
Bei der heutigen und für die Zukunft zu erwartenden Smartphone-Versorgungsdichte
ist es nahe liegend, darüber nachzudenken, eine Anwendung für diese Geräte zu
programmieren, welches die Aufgaben einer Übersichtskarte des Zoos und einer
Info-Tafel zu einzelnen Gehegen erfüllt.
Im Rahmen der bevorstehenden Bachelorarbeit wird dieses Programm als
Applikation für Android entwickelt. Die „Zoo-App“ soll eine Übersichtskarte des Zoos
(bzw. Tierparks) darstellen und die aktuelle Position hervorheben. Außerdem sollen
die Gehege auf der Karte anwählbar sein, um Bilder und detaillierte Informationen
über die dort lebenden Tiere erhalten zu können. So hat der Zoo-Besucher von
überall die Möglichkeit, sich einen guten Überblick zu beschaffen. Zusätzlich wird
noch ein Editor programmiert, mit dessen Hilfe Zoobetreiber die benötigten Daten für
die Applikation selber erstellen können. Im Zuge der Seminararbeit wurde eine
Vorstufe dieser Anwendung erstellt.
In dieser Seminararbeit wird die programmierte Anwendung vorgestellt und ihre
Aufgaben werden detailliert erläutert. Bevor auf die Anwendung eingegangen wird,
beschäftigt sich diese Arbeit näher mit dem Betriebssystem Android. Dabei wird
erklärt was genau Android ist, wie es aufgebaut ist und welche Komponenten zu
einer in Android programmierten Anwendung gehören.
-1-
2. Android
2.1 Was ist Android?
Die Firma Android wurde im Herbst 2003 gegründet und hatte sich auf die
Entwicklung von standortbezogenen Diensten für Mobiltelefone spezialisiert. Im
Sommer 2005 wurde die Firma dann von dem Unternehmen Google aufgekauft. Bis
dahin war Android nur Wenigen bekannt.
Am 5. November 2007 wurde dann von Google und 33 weiteren Mitgliedern aus
verschiedensten Branchen die Open Handset Alliance gegründet. Dazu gehörten
Netzbetreiber, wie T-Mobile, Softwarefirmen, wie zum Beispiel eBay, MarketingUnternehmen, Chiphersteller und die Gerätehersteller HTC, LG, Motorola und
Samsung. Somit waren Firmen aus allen Branchen beteiligt, die zur Entwicklung
eines mobilen Betriebssystems benötigt werden. Heute zählt das Konsortium 84
Mitglieder.
Am
Tag
der
Gründung
kündigten
sie
die
Entwicklung
eines
Betriebssystems für mobile Geräte unter dem Namen Android an. Es ist das
Hauptprodukt der Open Handset Alliance und kommt heute bei Smartphones,
Mobiltelefonen, Netbooks und Tablets zum Einsatz. Seit Oktober 2008 ist mit dem TMobile G1 das erste Android-Gerät offiziell im Handel.
Was Android für Gerätehersteller so interessant macht ist, dass es sich um eine freie
und quelloffene Software handelt. Jeder Hersteller kann Android somit kostenlos auf
seinen Geräten betreiben und an die eigenen Vorstellungen anpassen. So liefern
zum Beispiel HTC und Samsung ihre Android-Geräte fast ausschließlich mit der
eigenen Bedienoberfläche Sense bzw. TouchWiz aus. Diese hohe Anpassbarkeit
und die gebührenfreie Verwendung führt zu einem großen Interesse der Hersteller.
Folglich werden viele Geräte mit Android produziert und auf den Markt gebracht.
Allein der Hersteller Samsung hat schon ein Aufgebot von über 30 verschiedene
Android-Smartphones im Handel. Bei dieser Vielfalt an Geräten ist für den
Konsumenten die Chance groß eines zu finden, welches seinen Vorstellungen und
seiner Preisklasse entspricht. Ein weiterer positiver Aspekt für den Konsumenten ist
das große Angebot an Applikationen im Android Market. Der Android Market ist mit
mehr als 580.000 Anwendungen [Stand: November 2011] nicht nur die größte
Market-Software, sondern mit monatlich etwa 40.000 neuen Applikationen auch die
am schnellsten wachsende. Außerdem wurde im Dezember 2011 die Zahl von 10
-2-
Milliarden App-Downloads erreicht. Dies gibt dem Kunden die Möglichkeit, das
Smartphone an seine individuellen Bedürfnisse anzupassen.
Das Betriebssystem Android hat sehr gute Zukunftsaussichten. Im dritten Quartal
2011 lagen die Anteile an neu verkauften Smartphones laut Marktforschungsunternehmen Gartner bei 52,5%. Damit hat Android seine Marktanteile bei neu
verkauften Geräten im Vergleich zum Vorjahresquartal (25,3%) mehr als verdoppelt.
Insgesamt kann Google seit November 2011 über 200 Millionen aktivierte AndroidGeräte vorweisen und nähert sich langsam den 250 Millionen iOS-Geräten von
Apple.
Auch für Entwickler ist Android sehr interessant. Im Vergleich zu Apples „App Store“
ist die Programmierung und Bereitstellung von Anwendungen bei Android kostenlos.
Um Anwendungen für den „App Store“ programmieren zu können, muss man sich
bei Apple als Entwickler eintragen lassen und einen Jahresbeitrag von 99$ zahlen.
Programmiert werden die Android-Anwendungen ausschließlich in Java und sie
greifen
nur
bei
geschwindigkeitskritischen
Bereichen,
wie
Datenbank-
und
Webzugriffe, auf in C oder C++ geschriebene Basisbibliotheken zurück. Die
kostenfreie Programmierung in Kombination mit Java als Programmiersprache macht
die Entwicklung für Android sehr einsteigerfreundlich. Um eigene Anwendungen zu
programmieren, braucht man lediglich ein aktuelles Java-SDK und zusätzlich das
Android-SDK. Letzteres wird kostenlos bei http://developer.android.com/index.html
zur Verfügung gestellt. Mithilfe des mitgelieferten Emulators kann man die eigenen
Anwendungen direkt testen und die Notwendigkeit eines eigenen Endgerätes entfällt.
Ebenfalls sehr hilfreich für den Entwickler sind die gut dokumentierten APIs und das
umfangreiche Angebot von Code-Beispielen und Tutorials im Netz. Ein Nachteil bei
Android ist, dass die Anwendungen anders als bei Apple, keiner Überprüfung
unterzogen werden. Dadurch ist das Betriebssystem anfälliger gegen Schadsoftware.
Mit den steigenden Marktanteilen sind auch die Angriffe auf Android-Handys
sprunghaft angestiegen. So war Android im Oktober 2011 mit etwa 46% auf Platz 1
der meist attackierten Mobile-Systeme.
Im folgenden Abschnitt wird zuerst der Aufbau von Android näher beschrieben und
im Anschluss daran die programmierte Anwendung vorgestellt.
-3-
2.2 Architektur von Android
Das Betriebssystems Android basiert auf einer 4-Schichten-Architektur. Die Basis
bildet
der
Linux-Kernel
2.6,
der
in
Bezug
auf
Speichermanagment
und
Energieverbrauch optimiert worden ist. Er ist für die Speicherverwaltung,
Prozessverwaltung,
Multitasking
und
Netzwerkkommunikation
verantwortlich.
Außerdem enthält er die erforderlichen Gerätetreiber des Systems und dient als
Hardwareabstraktionsschicht für die Software. Ebene 2 bilden die AndroidLaufzeitumgebung und die Standardbibliotheken. Die Laufzeitumgebung beinhaltet
einen Hauptbestandteil der Android-Plattform, die Dalvik Virtual Machine (DVM). Bei
den Standardbibliotheken handelt es sich um C/C++-Bibliotheken. Sie stellen dem
Anwendungsrahmen (Ebene 3) die benötigten Funktionalitäten zum Betrieb von
Android-Anwendungen bereit. Der Anwendungsrahmen setzt sich aus in Java
geschriebenen Systemklassen zusammen. Diese Klassen ermöglichen es, aus
Anwendungen heraus auf Hardwarekomponenten zuzugreifen. So kann zum Beispiel
mit dem „Location Manager“ die aktuelle GPS-Position abgefragt werden. Die
oberste Ebene ist die Anwendungsschicht. Sie steht für alle auf dem Gerät
installierten Anwendungen. Dabei kann es sich um bereits vom Hersteller
vorinstallierte oder selbst programmierte bzw. heruntergeladene Anwendungen
handeln.
Abbildung 1 - Die Android-Systemarchitekur
-4-
2.2.1 Die Dalvik Virtual Machine
Die Dalvik Virtual Machine (DVM) ist eine, auf der Java Virtual Machine (JVM)
basierende, virtuelle Registermaschine. Sie wurde vom Google-Mitarbeiter Dan
Bornstein speziell für die Android-Plattform entwickelt. Während der Laufzeit führt die
DVM den zur Entwicklungszeit erzeugten Dalvik-Bytecode aus. Dieser Vorgang wird
in Abbildung 2 skizziert. Bei der Kompilierung des Programms wird vom JavaCompiler Java-Bytecode (*.class) erzeugt. Im zweiten Schritt kommt das im Android
SDK enthaltende Programm dx zum Einsatz. Es übersetzt den Java-Bytecode in den
Dalvik-Bytecode. Dabei werden mehrere .class-Dateien zu einer .dex-Datei
zusammengefügt und in Bezug auf den Speicherbedarf optimiert. Dieser Vorgang
wird auch Cross-Compiling genannt und ist für den Entwickler meist unsichtbar.
Abbildung 2 - Von *.java zu *.dex
Jede Android-Anwendung läuft in einer eigenen DVM, die für diese Anwendung
gestartet wurde. Dies hat den Vorteil, dass Abstürze nur die Anwendung selber
beenden und nicht das komplette System beeinflussen. Außerdem sind die Daten
einer Anwendung vor Zugriffen von außerhalb geschützt.
Ein weiterer Unterschied der DVM zur Java Virtual Machine ist die Nutzung von
Registern. Als Register bezeichnet man Zwischenspeicher, der sich direkt im
Mikroprozessor befindet. Er kann Berechnungen, die mehrere Zwischenschritte
brauchen, stark beschleunigen. Somit nutzt die DVM die Möglichkeiten der
heutzutage in den meisten Smartphones verbauten Prozessoren gut aus.
-5-
2.2.2 Standardbibliotheken
Bei den Standardbibliotheken handelt es sich um C/C++-Bibliotheken. Sie stellen die
Kernfunktionalitäten von Android bereit. Da es sich bei diesen Funktionalitäten oft um
geschwindigkeitskritische Bereiche handelt, sind die Bibliotheken nicht in Java
geschrieben, sondern mit den schnelleren Sprachen C bzw. C++ programmiert. Zu
diesen Bereichen zählen unter anderem Datenbanken (SQLite), MultimediaVerwaltung (Media-Framework), Web-Zugriffe (Webkit) und Grafik. Mithilfe von
Methoden dieser Bibliotheken kann der Entwickler die benötigten Funktionen in seine
Anwendung einbauen.
2.2.3 Anwendungsrahmen
Der
Anwedungsrahmen
setzt
sich
aus
komplett
in
Java
geschriebenen
Systemklassen zusammen. Diese Klassen werden auch Manager-Klassen genannt
und bilden den Grundstein einer jeden Anwendung. Sie dienen unter anderem zur
Hardwareabstraktion gegenüber dem Entwickler. Ein Beispiel einer solchen
Manager-Klasse ist der Location Manager. Mit ihm kann der aktuelle, geografische
Standort des Geräts bestimmt werden. Dieser Manager wird im weiteren Verlauf
dieser Arbeit noch mal aufgegriffen. Ein anderes Beispiel ist der Notification
Manager, der es einer Anwendung ermöglicht, Informationen in der Statusleiste des
Geräts
anzuzeigen.
Weitere
Manager-Klassen
und
Elemente
des
Anwendungsrahmens lassen sich aus Abbildung 1 entnehmen.
2.2.4 Anwendungsschicht
In der Anwendungsschicht befinden sich alle auf dem Gerät installierten
Anwendungen. Es kann sich dabei um bereits vom Hersteller vorinstallierte Apps, wie
Contacts und Phone, oder um selbst programmierte bzw. von Drittanbietern
erworbene Anwendungen handeln. Diese Schicht ist für den Android-Anwender
sichtbar und in ihr findet die Kommunikation zwischen Anwender und Anwendung
statt.
-6-
2.3 Elemente einer Anwendung
Dieses Kapitel beschäftigt sich, wie der Name schon sagt, mit den Elementen, aus
denen sich eine Android-Anwendung zusammensetzt. Dabei werden einige Punkte
nur kurz dargestellt.
2.3.1 Android-Komponenten
Ein Android-Programm setzt sich neben den allgemeinen Java-Klassen aus vier
Kernkomponenten zusammen. Es ist dabei nicht verpflichtend, dass jedes Programm
von allen vier zentralen Komponenten Gebrauch macht.
•
Activity
Activities
implementieren
die
sichtbaren
Bestandteile
einer
Anwendung und interagieren mit dem Anwender. In Kapitel 2.3.2 wird auf
diese Komponente nochmal detaillierter eingegangen.
•
Service Ein Service ist eine Komponente für Hintergrundoperationen. Er
besitzt keine Oberfläche, weil er nur im Hintergrund läuft. Um dies zu
verdeutlichen, kann man einen Musik-Player als Beispiel heranziehen. Die
Bedienung des Players kann man über eine Activity implementieren und das
eigentliche Abspielen der Musik einem Service überlassen. So kann die Musik
auch dann noch dann weiter abgespielt werden, wenn die Bedienoberfläche
geschlossen ist. Es gibt zwei Arten von Services: Local Service und Remote
Service. Als Local Service bezeichnet man einen Service, der im selben
Prozess wie die ihn startende Anwendung läuft. Ein Remote Service hingegen
läuft in seinem eigenen Prozess. Das hat den Vorteil, dass die Stabilität der
gesamten Anwendung erhöht wird. Außerdem bekommt der Remote Service
seinen eigenen Speicherbereich zugewiesen. Dies kann bei speicherintensiven Services sinnvoll sein.
•
Content Provider Die Aufgabe des Content Providers ist es, strukturierte
Datenmengen
(Datenbankinhalten)
und
Dateien
über
die
Anwendungsgrenzen hinaus zu veröffentlichen und zu verwalten. Dabei
werden stets nur die Inhalte und nie die Dateien bzw. Datenbanken selbst
übergeben.
•
Broadcast Receiver Broadcast Receiver sind für das Empfangen von
Systemnachrichten (Broadcast Intents) zuständig. Broadcast Intents treten bei
bestimmten Systemereignissen auf. Zu diesen Ereignissen zählen ein
-7-
niedriger Akkustand oder Störungen der Netzwerk- oder GPS-Verbindung. Die
Intents werden vom Broadcast Receiver registriert und es kann innerhalb der
Anwendung auf sie reagiert werden.
2.3.2 Activity
Activities sind die für den Anwender sichtbaren Bestandteile des AndroidProgramms. Mithilfe von Oberflächenelementen, wie zum Beispiel Textfeldern,
Eingabefeldern oder Schaltflächen, kann der Anwender mit dem Programm
interagieren. Diese Elemente nennt man Views und sie können mit verschiedenen
Layouts auf dem Bildschirm angeordnet werden. Eine Anwendung kann durch
Kombination mehrerer Activities zu einem komplexen Programm verknüpft werden.
Dabei ist eine Activity immer nur für die Darstellung von genau einer Bildschirmseite
zuständig. Um Activities zu vernetzen, werden Intents benutzt. Intents ermöglichen
es dem Entwickler, eine Activity (oder auch einen Service) aus einer anderen heraus
zu starten. Bei Bedarf können auch Daten mitgeschickt werden, auf die die neue
Activity dann zugreifen kann. Wurde eine neue Activity gestartet, ist die alte nicht
mehr sichtbar. Sie wechselt automatisch in einen inaktiven Zustand. Dieser Zustand
ist Teil des Lebenszyklus einer Activity. In Abbildung 3 ist dieser Lebenszyklus grob
skizziert.
Abbildung 3 - Lebenszyklus einer Activity
Wie in der Abbildung dargestellt, werden beim Starten einer Activity die Methoden
onCreate(), onStart() und onResume() in dieser Reihenfolge aufgerufen. onCreate()
erstellt die Activity mit all ihren Views, aber erst nach dem Aufruf von onResume() ist
sie auch sichtbar. Wenn die Activity nur teilweise durch eine neue Activity (Activity 2)
verdeckt wird, wird die Methode onPause() aufgerufen. Wird sie jedoch von Activity 2
-8-
komplett überdeckt, wird sowohl onPause() als auch onStop() ausgeführt. Sollte
Activity 2 jetzt geschlossen werden, muss Activity 1 nicht wieder komplett neu erstellt
werden. Es werden die Methoden onRestart(), onStart() und onResume() ausgeführt
und sie ist wieder sichtbar. Nur wenn eine Activity komplett beendet werden soll wird
onDestroy() aufgerufen. Bei diesen Methoden handelt es sich um Callbacks, die
automatisch aufgerufen werden. Sie können überschrieben werden und es kann ein
eigenes Verhalten implementiert werden.
In den folgenden Unterkapiteln werden die Bestandteile einer Activity näher
beschrieben. Zu diesen Bestandteilen zählen Views, Layouts und Menüs.
2.3.2.1 Views
Views sind Oberflächenelemente, die in der Activity dargestellt werden. Davon gibt
es einige zur Auswahl, von denen nur die wichtigsten auflisten werden.
•
TextView:
Ein- oder mehrzeiliges Textfeld
•
EditText:
Formularfeld zur Texteingabe
•
Button:
Schaltfläche
•
ImageButton:
Schaltfläche in Form eines Bildes
•
ImageView:
Bild
•
CheckBox:
Ankreuzfeld
•
RadioGroup:
Menge von RadioButtons (Auswahlschalter)
•
Spinner:
Auswahlliste
•
DatePicker:
Auswahl von einem Datum
•
TimePicker:
Auswahl der Uhrzeit
2.3.2.2 Layouts
Diese Views können mithilfe von Layouts angeordnet werden. Die gängigsten
Layouts, von denen es auch eine Vielzahl gibt, sind folgende:
•
LinearLayout
Beim
LinearLayout
werden
die
Views
hintereinander
abgebildet. Dabei kann die Ausrichtung zu Beginn auf horizontal oder vertikal
gesetzt werden
•
TableLayout Hier werden die Views in einem Feld einer Tabelle angezeigt.
Die Tabelle kann dabei eine beliebige Größe haben.
-9-
•
FrameLayout Dieses Layout platziert die Views in der linken oberen Ecke des
Bildschirms. Im Gegensatz zu den bisher genannten Layouts können sich
Views hier überlagern. Das FrameLayout sollte jedoch nur zur Anzeige von
genau einem Element benutzt werden.
•
AbsoluteLayout
Das AbsoluteLayout gibt dem Entwickler die Möglichkeit
Oberflächenelemente pixelgenau auf dem Bildschirm zu positionieren. Da
jedoch bei der Vielzahl an Android-Geräten auch viele verschiedene
Bildschirmgrößen und Auflösungen im Umlauf sind, ist dieses Layout selten
sinnvoll einsetzbar. In Einzelfällen kann es aber nützlich oder gar notwendig
sein.
•
RelativeLayout Beim RelativeLayout können Oberflächenelemente relativ zu
den Bildschirmrändern, oder relativ zu anderen Views (z.B. unterhalb von
View x) dargestellt werden. Eine absolute Positionierung wie beim
AbsoluteLayout ist ebenfalls möglich.
Neben diesen reinen Layoutklassen existieren noch weitere, von ViewGroup
abgeleitete Klassen, die eine Mischung aus Layout- und View-Elementen sind. Diese
Konstrukte stellen fertige Komponenten für bestimmte Situationen zur Verfügung. So
gibt es zum Beispiel eine ListView zur Darstellung von Views in Listenform, eine
Gallery zur Implementierung einer Bildergalerie und die MapView zur Darstellung
einer Kartenansicht wie beispielsweise Google Maps.
Layouts und Views werden bei Android üblicherweise im XML-Format definiert. Zwar
könnte man dies auch über die entsprechenden Klassen direkt im Java-Code
machen, es ist aber nur in Einzelfällen zu empfehlen. Das XML-Format ist deutlich
lesbarer und der Java-Code wird durch die Definition in XML viel übersichtlicher.
Dazu kommt noch, dass das Werkzeug zur Oberflächengestaltung im Android-Plugin
XML-Code ausgibt. Abbildung 4 zeigt den Aufbau einer solchen XML-Datei. Hier
wurde ein Button mit der Aufschrift „Klick mich“ und ein TextView mit dem Text „Hello
World“ erstellt. Beide Views sind in einem LinearLayout vertikal angeordnet. Der
onClick-Event des Buttons wurde außerdem mit der Methode „getButtonClicked“
verbunden. Diese Methode muss jetzt im Java-Code der Activity implementiert
werden.
- 10 -
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World" >
</TextView>
<Button
android:id="@+id/button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="getButtonClicked"
android:text="Klick mich" >
</Button>
</LinearLayout>
Abbildung 4 - Layout-Datei main.xml
Diese Layout-Datei main.xml kann jetzt beim Erstellen der Activity geladen werden.
Um dies kurz zu verdeutlichen, zeigt der Code in Abbildung 5 eine Activity
HelloWorld mit dem ihr zugewiesenen Layout main.xml. Außerdem wird die Methode
getButtonClicked() des Buttons implementiert. In diesem Beispiel wird die Activity
beim Klicken des Buttons geschlossen.
package helloworld.test;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
public class HelloWorld extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void getButtonClicked(View v) {
this.finish();
System.exit(0);
}
}
Abbildung 5 - Activity als Java-Datei HelloWorld.java
Wie die Activity nach dem Erstellen aussieht, kann man Abbildung 6 entnehmen.
- 11 -
Abbildung 6 - Die fertige Activity
2.3.2.3 Menüs
Das Menü ist ein weiterer Bestandteil einer Activity. Es gibt zwei Arten von Menüs,
das Optionsmenü und das Kontextmenü. Das Optionsmenü wird mit der Menü-Taste
des Handys geöffnet. Es erscheint am unteren Bildschirmrand. Während man das
Optionsmenü der kompletten Activity zuordnet, gehört das Kontextmenü zu einem
bestimmten Element der Activity.
So kann man für jedes Element ein eigenes
Kontextmenü erstellen, welches über einen langen Klick (Long-Click-Event) auf jenes
Element geöffnet wird. Ein Anwendungsgebiet des Kontextmenüs ist zum Beispiel
die Erklärung der Funktion eines Buttons.
2.3.3 Android-Manifest
Ein wichtiger bisher nicht erwähnter Bestandteil einer Anwendung ist das AndroidManifest. Es ist eine XML-Datei (AndroidManifest.xml), die im Wurzelverzeichnis der
Anwendung liegt. Sie wird beim Erstellen eines Projekts automatisch angelegt und
wird benötigt, um die Anwendung lauffähig zu machen. Das Manifest enthält neben
dem Package-Namen und der Versionsnummer der Anwendung noch den minimalen
Android-API-Level, unter dem die Anwendung laufen kann. Zusätzlich müssen alle in
der Anwendung verwendeten Komponenten, wie Activities und Services, eingetragen
werden. So werden sie dem System bekannt gemacht. Außerdem wird die Start- 12 -
Activity festgelegt. Will man in seiner Anwendung zum Beispiel auf die GPS-Daten
des Handys zugreifen oder Daten auf der SD-Karte speichern braucht man dazu
Berechtigungen. Diese werden als usespermissions bezeichnet und müssen
ebenfalls in das Manifest eingetragen werden. Abbildung 7 zeigt den typischen
Aufbau des Android-Manifests. Es handelt sich dabei um das Manifest zu der in
Abbildung 6 dargestellten Anwendung. Hier wird der Package-Name und die
Versionsnummer angegeben (1), die minimale SDK-Version genannt (2), die
HelloWorld-Activity bekannt gemacht (3) und als Start-Activity gesetzt (4). Aus
Demonstrationszwecken wird noch eine uses-permission eingetragen (5) die es der
Anwendung erlaubt, das Handy vibrieren zu lassen.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="helloworld.test" (1)
android:versionCode="1"
android:versionName="1.0" > (1)
<uses-sdk android:minSdkVersion="8" /> (2)
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name" (3)
android:name=".HelloWorld" >
<intent-filter >
<action android:name="android.intent.action.MAIN" /> (4)
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.VIBRATE" /> (5)
</manifest>
Abbildung 7 - AndroidManifest.xml
Das nächste Kapitel beschäftigt sich mit der Vorstufe der Zoo-App, die im Zuge der
Seminararbeit programmiert wurde („ZooAppSeminar“). Dabei wird weniger auf die
Programmierung eingegangen, sondern mehr Wert auf die Funktionen der
Anwendung und die Aufgaben der einzelnen Activities gelegt.
- 13 -
3. ZooAppSeminar
Die App wurde im Zuge der Seminararbeit programmiert und diente hauptsächlich
der Einarbeitung in die Programmierung für Android. Zusätzlich legt dieses
Programm den Grundstein für die endgültige Anwendung, die im Rahmen der
Bachelorarbeit entwickelt werden soll. Man kann bei dieser App also von einer
Vorabversion sprechen, welche die Basisfunktionen der fertigen Anwendung
implementiert. Die wichtigsten dieser Basisfunktionen sind die Darstellung der ZooKarte und das Anzeigen von Informationen über bestimmte Gehege. Diese Gehege
werden zusammen mit der aktuellen GPS-Position des Benutzers auf der Karte
angezeigt. Weitere Funktionen, wie zum Beispiel das Darstellen einer Bildergalerie
zu einem Gehege, werden im Verlauf dieses Kapitels noch genannt und näher
beschrieben.
3.1 Activities der Zoo-App
In diesem Unterkapitel der Arbeit werden die einzelnen Activities der Zoo-App
vorgestellt. Zuerst werden diese Activities hier aufgelistet, um einen guten Überblick
zu haben. Im weiteren Verlauf wird dann näher auf die einzelnen Activities
eingegangen.
•
ZooMainActivity: Startactivity; stellt die Karte des Zoos dar
•
ZooInfo:
Informationen über den Zoo (Öffnungszeiten usw.)
•
GehegeListe:
Auflistung aller Gehege / Tiere des Zoos
•
PinguinInfo:
Information über Pinguine
•
PinguinGallery:
Bildergalerie zu den Pinguinen
•
GehegeInfo:
Information über ein bestimmtes Gehege
•
GehegeGallery:
Bildergalerie des Geheges
- 14 -
3.1.1 ZooMainActivity
Abbildung 8 – Übersicht mit geöffnetem Menü
Abbildung 9 – GPS-Modus
Bei der Activity „ZooMainActivity“ handelt es sich um die Startactivity der
Anwendung. Sie ist das Herzstück der ganzen Zoo-App und über sie können die
anderen Activities angesteuert werden. Die „ZooMainActivity“ setzt sich aus einer
ImageZoomView, drei ImageButtons, einer TextView und einem Optionsmenü
zusammen. Bei der ImageZoomView handelt es sich um eine selbsterstellte, von
View abgeleitete Klasse. Die View kann Bilder darstellen. Die Besonderheit ist, dass
das Bild dabei gezoomt und verschoben werden kann. Dieser Klasse ist am Ende
von Kapitel 3.1.1 ein eigener Absatz gewidmet, da hier noch weitere Aspekte
dargestellt werden sollen. Von den drei ImageButtons repräsentieren zwei Gehege,
die sich im Zoo befinden. Der dritte ImageButton zeigt die aktuelle GPS-Position des
Geräts auf der Karte an. Er ist nur sichtbar, wenn sich die Anwendung im GPSModus befindet. Die TextView ist ebenfalls nur im GPS-Modus sichtbar. Sie gibt die
GPS-Koordinaten auf zwei Nachkommastellen gerundet an. Über das Menü kann
man in diesen Modus wechseln. Außerdem kann man über dieses, in Abbildung 8
gezeigte Menü, die Activities ZooInfo und GehegeListe öffnen. Wie die Navigation
zwischen den Activities genau funktioniert wird in Kapitel 3.2 noch näher erläutert.
- 15 -
Die ImageButtons befinden sich im Vordergrund der Karte. Um dies zu ermöglichen,
wurde bei der „ZooMainActivity“ das RelativeLayout (s. 2.3.2.2 Layouts) verwendet.
3.1.1.1 ImageZoomView
Wie weiter oben schon erwähnt, ist die ImageZoomView eine selbsterstellte Klasse
und wurde von der Android-Klasse View abgeleitet. Es handelt sich also um eine
sogenannte „Custom View“. Die Klasse ImageZoomView wurde zusammen mit den
Klassen zur Implementierung der Zoom- und Pan-Logik, von einem Entwicklerteam
des Herstellers Sony Ericsson programmiert. Der Mitarbeiter Andreas Agvard hat
dazu
ein
vierteiliges
Tutorial
erstellt
und
den
Code
veröffentlicht
(http://developer.sonyericsson.com/wp/2010/05/18/).
Die Besonderheit dieser Klasse ist, dass der Zoom und das Verschieben mit einem
Finger bedient werden können. Streicht man mit seinem Finger über das Bild kann
man es verschieben. Hält man den Finger vor dem Streichen länger auf dem
Touchscreen gedrückt wechselt man in den Zoom-Modus. So kann das Bild durch
vertikale Bewegungen gezoomt werden.
3.1.2 ZooInfo
Abbildung 10 - ZooInfo-Activity
Die ZooInfo-Activity stellt allgemeine Informationen über den Zoo dar. Es werden die
Öffnungszeiten des Zoos, des Zoo-Restaurants und der Attraktion Ponyreiten
- 16 -
angezeigt. Diese Informationen werden mithilfe von TextViews dargestellt und sind in
einem LinearLayout angeordnet.
3.1.3 GehegeListe
Abbildung 11 - GehegeListe-Activity
Die GehegeListe-Activity ist eine Übersicht über alle im Zoo existierenden Gehege.
Sie besteht aus einer ListView, die alle Gehege in Form von TextViews beinhaltet. In
dem jetzigen Stand des Programms besteht diese Liste nur aus den zwei Einträgen
„Elefant“ und „Pinguin“. Durch einen Klick auf ein Listenelement können die
Gehegeinformationen zu diesem Gehege aufgerufen werden.
- 17 -
3.1.4 PinguinInfo
Abbildung 12 - PinguinInfo-Activity
In der PinguinInfo-Activity werden Informationen zum Pinguin angezeigt. Diese
Informationen werden mit einer TextView dargestellt. Außerdem besitzt die Activity
noch einen ImageButton, mit dem die Bildergalerie zum Gehege geöffnet werden
kann. Die Activity „GehegeInfo“ sieht identisch aus und unterscheidet sich nur im
Inhalt der TextViews zur PinguinInfo-Activity. Deshalb wird hier auf eine genauere
Beschreibung von GehegeInfo verzichtet.
3.1.5 PinguinGallery
Abbildung 13 - PinguinGallery-Activity
- 18 -
Hierbei handelt es sich um eine Bildergalerie, welche von der PinguinInfo-Activity aus
geöffnet werden kann. Sie gehört zum Pinguingehege. In der oberen Hälfte des
Bildschirms befindet sich eine Gallery und darunter wird eine ImageView dargestellt.
Eine Gallery ist eine fertige Android-Darstellungskomponente, die eine Liste von
Bildern
horizontal
nebeneinander
darstellt.
Sie
enthält
alle
Bilder
des
Pinguingeheges. Das ausgewählte Bild wird vergrößert in der ImageView angezeigt.
Bei der weiter oben erwähnten Activity „GehegeGallery“ handelt es sich um eine sehr
ähnliche Activity. Sie enthält lediglich andere Bilder und es werden MP3-Dateien zum
Bild abgespielt.
3.2 Navigation der Zoo-App
In diesem Kapitel geht es um die Navigation der Zoo-App. Dabei ist nicht die
Navigation in Form einer Routenplanung gemeint, sondern die Navigation zwischen
den Activities bzw. Funktionen der Anwendung. Bevor diese Navigation beschrieben
wird, werden alle Funktionen der Anwendung genannt, kurz erläutert und mit einer ID
versehen, um die Zustandsdiagramme zur Navigation übersichtlicher zu halten.
Außerdem wird noch die zur Funktion gehörende Activity angegeben.
- 19 -
ID
Beschreibung
Die
Übersicht
Zookarte
Activity
wird
vollständig
auf
dem
Bildschirm dargestellt. Als Symbole sind nur
die Gehege zu sehen. Das gibt dem Anwender
ZooMainActivitiy
eine gute Übersicht über den Zoo
Die aktuelle GPS-Position wird als roter Punkt
auf der Karte markiert und sie wird auf diesen
GPS-Modus
Punkt zentriert und reingezoomt. Ändert sich ZooMainActivitiy
die Position wandert die Karte mit. (gute
Orientierung)
Die Öffnungszeiten des Zoos, des Zoo-
Zoo-Info
Restaurants und der Attraktion „Ponyreiten“ ZooInfo
werden angezeigt.
Gehegeliste
Gehege-Info
Gehegegalerie
Eine Liste, die alle Gehege bzw. Tiere des
Zoos enthält, wird dargestellt.
GehegeListe
Informationen über das ausgewählte Gehege GehegeInfo
bzw. Tier werden angezeigt.
PinguinInfo
Eine Bildergalerie mit allen Bildern zum GehegeGallery
Gehege bzw. Tier wird dargestellt.
PinguinGallery
Tabelle 1 - Funktionen der Anwendung
Um die Übergänge zwischen diesen Funktionen bzw. Activities darzustellen wurden
zwei Zustandsdiagramme erstellt (Abbildungen 14 und 15). Zur besseren Übersicht
wurden die Funktionen Übersicht und GPS-Modus in Abbildung 14 unter
ZooMainActivity zusammengefasst und in ein eigenes Zustandsdiagramm (Abbildung
15) ausgelagert.
Die Anwendung startet mit der Activity ZooMainActivity. Dort befindet man sich im
Übersichtsmodus. Die Karte ist komplett sichtbar und nur von den ImageButtons der
Gehege überdeckt. Von hier aus kann man zu verschiedenen Funktionen gelangen.
Klickt man auf einen der ImageButtons, wird die entsprechende Gehegeinformation
angezeigt, von der aus man wiederum zur zugehörigen Bildergalerie gelangen kann.
Drückt man die Menütaste des Geräts öffnet sich das Menü und man kann zwischen
GPS- und Übersichtsmodus wechseln oder die Activities GehegeListe bzw. ZooInfo
- 20 -
starten. Die Beschriftungen der Pfeile in den Zustandsdiagrammen, die mit „Menü:“
beginnen, stehen für das Drücken des entsprechenden Menüelements. Die Aktion
„Zurück-Button geklickt“ repräsentiert das Drücken der Zurück-Taste, die bei jedem
Android-Gerät vorhanden ist. Diese Aktion schließt die aktive Activity und die davor
offene wird wieder sichtbar. Befindet man sich in der ZooMainActivity, wird die
Anwendung über die Zurück-Taste geschlossen.
Abbildung 14 – Zustandsdiagramm 1
- 21 -
Abbildung 15 – Zustandsdiagramm 2
- 22 -
4. Fazit
Zum Abschluss dieser Arbeit lässt sich sagen, dass das mobile Betriebssystem
Android sehr gute Zukunftsaussichten hat. Es ist attraktiv für die Hersteller von
Endgeräten,
für
die
Programmierer
von
Anwendungen
und
wird
ständig
weiterentwickelt. Die daraus resultierende Vielfalt an Android-Geräten und –
Anwendungen macht Android auch für die Kunden zur einer ansprechenden
Alternative zu Apples iOS oder Microsofts Windows Phone 7.
Die für die Arbeit programmierte Anwendung „ZooAppSeminar“ deckte viele der
grundlegenden Möglichkeiten der Android-Programmierung ab und ist ein guter
Einstieg in die Materie. Außerdem legt die Anwendung den Grundstein für das im
Rahmen der Bachelorabeit zu entwickelnde Programm und wird dort weiter
ausgebaut.
- 23 -
5. Literaturverzeichnis
[1]
Arno Becker und Marcus Pant. Android 2 – Grundlagen und Programmierung.
dpunkt.verlag. 2010
[2]
Wikipedia. Android (Betriebssystem).
Webseite. 03.01.2012.
http://de.wikipedia.org/wiki/Android_(Betriebssystem)
[3]
Wikipedia. Android Market.
Webseite. 03.01.2012.
http://de.wikipedia.org/wiki/Android_Market
[4]
Wikipedia. Open Handset Alliance.
Webseite. 03.01.2012.
http://de.wikipedia.org/wiki/Open_Handset_Alliance
[5]
Open Handset Alliance. Alliance Members.
Webseite. 03.01.2012.
http://www.openhandsetalliance.com/oha_members.html
[6]
Heise Online. Marktforscher: Hälfte aller Smartphones setzt auf Android.
Webseite. 03.01.2012.
http://www.heise.de/newsticker/meldung/Marktforscher-Haelfte-allerSmartphones-setzt-auf-Android-1379467.html
[7]
Heise Online. Ein Android für alle Fälle.
Webseite. 03.01.2012.
http://www.heise.de/ct/artikel/Ein-Android-fuer-alle-Faelle-1013666.html
[8]
Android and Me. Updates, or lack thereof, on the Android Update Alliance.
Webseite. 03.01.2012.
http://androidandme.com/2011/08/news/updates-or-lack-thereof-on-theandroid-update-alliance/
[9]
WinFuture. Angriffe auf Android-Handys nehmen sprunghaft zu.
Webseite. 03.01.2012.
http://winfuture.de/news,66623.html
- 24 -
6. Abbildungsverzeichnis
Abbildung 1: Die Android-Systemarchitekur
entnommen aus [1]
Abbildung 2: Von *.java zu *.dex
entnommen aus [1]
Abbildung 3: Lebenszyklus einer Activity
entnommen aus [1]
- 25 -
7. Eidesstattliche Erklärung
Hiermit versichere ich, dass ich die Seminararbeit mit dem Thema „Android-App zur
Bilddarstellung“ selbstständig verfasst und keine anderen als die angegebenen
Quellen und Hilfsmittel benutzt habe, alle Ausführungen, die anderen Schriften
wörtlich oder sinngemäß entnommen wurden, kenntlich gemacht sind und die Arbeit
in gleicher oder ähnlicher Fassung noch nicht Bestandteil einer Studien- oder
Prüfungsleistung war.
Name: Marco Mix
Aachen, den 03.01.2012
_____________________
Unterschrift des Studenten
- 26 -
Herunterladen