Android Applikation zur Information von Patienten am Klinikum Großhadern. Bachelorarbeit. Andreas Maximilian Bachmayer



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

GeoPilot (Android) die App

DOKUMENTATION VOGELZUCHT 2015 PLUS

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Anleitung BFV-Widget-Generator

Outlook Web App 2010 Kurzanleitung

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

HTML Programmierung. Aufgaben

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

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

Erzherzog Johann Jahr 2009

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Nutzung des mymmx Web Clients von Tess

Anleitung für die Registrierung und das Einstellen von Angeboten

2.1 Grundlagen: Anmelden am TYPO3-Backend

Er musste so eingerichtet werden, dass das D-Laufwerk auf das E-Laufwerk gespiegelt

Arbeiten mit UMLed und Delphi

1 Dokumentenmanagement

12. Dokumente Speichern und Drucken

mobilepoi 0.91 Demo Version Anleitung Das Software Studio Christian Efinger Erstellt am 21. Oktober 2005

Naviki GPS-Anwendungsentwicklung für Mobiltelefone

Datensicherung. Beschreibung der Datensicherung

Dokumentation zum Spielserver der Software Challenge

Bauteilattribute als Sachdaten anzeigen

Speichern. Speichern unter

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Einstellungen im Internet-Explorer (IE) (Stand 11/2013) für die Arbeit mit IOS2000 und DIALOG

Diese Ansicht erhalten Sie nach der erfolgreichen Anmeldung bei Wordpress.

Tevalo Handbuch v 1.1 vom

ROFIN App Benutzerhandbuch. Version 1.0

1. Anleitung APP mobile Ergebnismeldung

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

Zugriff auf Daten der Wago über eine Webseite

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

teischl.com Software Design & Services e.u. office@teischl.com

1. Laptop: Benutzen Sie die Anleitung ab Seite 2 2. Tablet / Smartphone: Benutzen Sie die Anleitung ab Seite 4. Seite 2 Seite 4

Ihr CMS für die eigene Facebook Page - 1

Arbeiten im Webbook. 1. Die Bibliothek Ansicht Werkeuge... 3

Um zu prüfen welche Version auf dem betroffenen Client enthalten ist, gehen Sie bitte wie folgt vor:

Updatebeschreibung JAVA Version 3.6 und Internet Version 1.2

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

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Hilfe zur Dokumentenverwaltung

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

Kapitel 3 Frames Seite 1

BAYERISCHES STAATSMINISTERIUM DES INNERN

Dokumentation: Balanced Scorecard

Mit jedem Client, der das Exchange Protokoll beherrscht (z.b. Mozilla Thunderbird mit Plug- In ExQulla, Apple Mail, Evolution,...)

SANDBOXIE konfigurieren

Meldung Lokale Anwendung inkompatibel oder Microsoft Silverlight ist nicht aktuell bei Anmeldung an lokal gespeicherter RWE SmartHome Anwendung

Computeria Solothurn

2. Einloggen bei PROJEKTE2GO Systemanforderungen Benutzeroberfläche Funktionen... 6

Installation / Aktualisierung von Druckertreibern unter Windows 7

ACHTUNG: Es können gpx-dateien und mit dem GP7 aufgezeichnete trc-dateien umgewandelt werden.

Der Kalender im ipad

Die Dateiablage Der Weg zur Dateiablage

2. Die eigenen Benutzerdaten aus orgamax müssen bekannt sein

Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH

Kleines Handbuch zur Fotogalerie der Pixel AG

Der schnelle Weg zu Ihrer eigenen App

Übung: Verwendung von Java-Threads

TTS - TinyTimeSystem. Unterrichtsprojekt BIBI

Logics App-Designer V3.1 Schnellstart

VB.net Programmierung und Beispielprogramm für GSV

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

ÖKB Steiermark Schulungsunterlagen

Outlook 2000 Thema - Archivierung

Die Installation von D-Link WLAN Karten unter Windows Vista

Einführung Responsive Webdesign

Übung 1. Explorer. Paint. Paint. Explorer

Durchführung der Datenübernahme nach Reisekosten 2011

Anleitung zur Daten zur Datensicherung und Datenrücksicherung. Datensicherung

3. GLIEDERUNG. Aufgabe:

Stand: Dokumentenverwaltung Modulbeschreibung

Bedienungsanleitung für den SecureCourier

Fernzugang Uniklinikum über VMware View

Newsletter. 1 Erzbistum Köln Newsletter

Tutorial -

Daten-Synchronisation zwischen dem ZDV-Webmailer und Outlook ( ) Zentrum für Datenverarbeitung der Universität Tübingen

Revox Joy S232 App D 1.0

Registrierung am Elterninformationssysytem: ClaXss Infoline

Handbuch B4000+ Preset Manager

Berechtigungen im Kalender Anleitung für die Rechtevergabe im Outlook Kalender FHNW, Services, ICT

OLXTeamOutlook 1.5 für Outlook 2003, 2002/XP, 2000 und 97/98

malistor Phone ist für Kunden mit gültigem Servicevertrag kostenlos.

Allgemeiner Leitfaden zum Einfügen suchmaschinenoptimierter Texte

BFV Widgets Kurzdokumentation

FTP-Server einrichten mit automatischem Datenupload für

Handbuch ECDL 2003 Basic Modul 5: Datenbank Access starten und neue Datenbank anlegen

GPS-CarControl APP Android Benutzeranleitung

OS Anwendungsbeschreibung

OP-LOG

Einführung in das redaktionelle Arbeiten mit Typo3 Schulung am 15. und

mehr funktionen, mehr e-commerce:

«Integration in WebSite» HTML-/Javascript-Code-Beispiele

Treppensoftware Programme. Hilfe - 3D Plus Online. konstruieren/präsentieren

Viele Bilder auf der FA-Homepage

Kurzeinführung Excel2App. Version 1.0.0

Enigmail Konfiguration

Transkript:

Android Applikation zur Information von Patienten am Klinikum Großhadern Bachelorarbeit von Andreas Maximilian Bachmayer München Hochschule München Fakultät Feinwerk- und Mikrotechnik, Physikalische Technik Studiengang Bachelor Mechatronik/Feinwerktechnik Studienrichtung Medizintechnik Referent: Dr. med. Dipl. Inform. Walter Swoboda Korreferent: Prof. Dipl.-Phys. Armin Giebel Betreuer: Dr. med. Dipl. Inform. Walter Swoboda Tag der Einreichung: 9. Februar 2012 München 2012

Andreas M. Bachmayer 2 Android Applikation Inhalt 1. Android Applikation... 4 1.1. Einleitung und Fragestellung... 4 1.2. Ziel... 4 2. Material und Methoden... 5 2.1. Entwicklungsumgebung... 5 2.2. Details zur Entwicklungsumgebung... 6 2.3. Erklärung der Verzeichnisstrukturen... 7 2.3.1. Views... 9 3. Programmerläuterung... 11 3.1. Überblick... 11 3.2. Programmablaufdiagram... 12 3.3. Quellcodeerläuterung... 13 3.3.1. GroßhadernActivity... 13 3.3.2. Webview... 16 3.3.3. Klinikenliste... 17 3.3.4. Öffnen der Webseiten der einzelnen Kliniken... 19 3.3.5. Maps... 20 4. Ergbnisse und Diskussion... 22 5. Überblick über die verwendeten Klassen... 23 6. Ausblick und aktueller Entwicklungsstand... 23 7. Verzeichnisse... 24 7.1. Abblidungsverzeichnis... 24 7.2. Abkürzungen... 24 7.3. Quellenverzeichnis... 25 8. Anhang... 25 8.1. Quell-Code... 25

Andreas M. Bachmayer 3 Android Applikation 8.1.1. Java Dateien... 25 8.1.2. XML-Dateien... 31 8.1.3. HTML Seiten... 42 8.2. Screenshots... 46 8.2.1. Applikation... 46

Andreas M. Bachmayer 4 Android Applikation 1. Android Applikation 1.1. Einleitung und Fragestellung Die Informationsbeschaffung aus dem Internet gewinnt immer mehr an Bedeutung. Auch die Nutzung des Internets mittels mobiler Endgeräte, wie Handys, Smartphones und Tablets nimmt stetig zu (1). Mit dem seit 2010 begonnenen Ausbau des neuen Mobilfunknetzes der 4. Generation (LTE), das mit enormen Übertragungsraten von bis 150 MBit/s aufwarten kann, wird sich dieser Trend fortsetzen. Mit diesem neuen Standard werden auch datenintensive Anwendung wie z.b. mobiles Fernsehen nutzbar sein. Da natürlich auch Patienten ihre Informationen zunehmend aus dem Internet beziehen, wird es zukünftig unerlässlich sein, Informationen zu einem Klinikum auch für mobile Endgeräte zur Verfügung zu stellen. So sollte es möglich sein, schnell und übersichtlich Informationen darüber zu erlangen, welche Klinik Anlaufstelle für den Patienten ist, ob es für das Krankheitsbild Spezialisten in der Klinik gibt, wie diese zu kontaktieren sind und zu welchen Sprechzeiten. Einen Ansatz hierzu hat beispielsweise das Klinikum Ingolstadt gemacht, welches eine Applikation mit Informationen zum Klinikum für das iphone zur Verfügung stellt. Aus diesen Gegebenheiten entstand die Idee auch für das Uniklinikum München eine solche Applikation zu entwickeln 1.2. Ziel Es soll eine Applikation entwickelt werden, die das Funktionsgerüst für eine später zu veröffentlichende Version bildet. Wichtig ist einfache Änderbarkeit, um die Informationen mit geringem Aufwand auf dem neusten Stand halten zu können. Dies soll erreicht werden, in dem eine webbasierte Applikation entwickelt wird, die die jeweiligen Inhalte direkt aus dem Internet abruft.

Andreas M. Bachmayer 5 Material und Methoden 2. Material und Methoden 2.1. Entwicklungsumgebung: Es gibt verschiedene Wege, um Software für die ANDROID Plattform zu entwickeln. Die wohl gebräuchlichste (2) ist die Entwicklungsumgebung ECLIPSE in Kombination mit dem ANDROID SDK. SDK steht für Software Developing Kit und ist eine Zusatz Software, die es ermöglicht, mit ECLIPSE komfortabel ANDROID Anwendungen zu programmieren. Mit der Installation des ANDROID SDK steht in ECLIPSE eine Vielzahl von Programmierschnittstellen zur Verfügung. Dieses API (application programming interface) wird zum großen Teil kostenfrei von GOOGLE zur Verfügung gestellt und bietet die Möglichkeit, Soft- und Hardwareschnittstellen des ANDROID Betriebssystems einzubinden. So gibt es zum Beispiel eine API für GOOGLE-Maps und es ist möglich, mit nur einer Zeile Quellcode die Informationen des GPS Empfänger des Endgerätes für die Applikation zugänglich zu machen. Abbildung 1: Entwicklungsumgebung ECLIPSE

Andreas M. Bachmayer 6 Material und Methoden Eine weitere sehr wichtige Funktion des ANDROID SDK ist der Geräte-Emulator. Er ermöglicht es, ein mobiles Endgerät mit allen Funktionen auf dem PC grafisch darzustellen. Dabei kann die Version des Betriebssystems und die Hardware Konfiguration des Gerätes frei eingestellt werden. Somit hat man die Möglichkeit, die neu entwickelte Software auf dem virtuellen Gerät zu installieren und zu testen. Abbildung 2: ANDROID Emulator 2.2. Details zur Entwicklungsumgebung: Die Entwicklungsumgebung ist im Wesentlich in drei Bereiche aufgeteilt. Am linken Rand werden die Projekte aufgelistet, die momentan bearbeitet werden können. Sie werden im Stil eines Verzeichnisbaums angezeigt, wie man ihn aus jedem Dateiexplorer kennt. In der Mitte wird der Quelltext der gerade aufgerufenen Datei angezeigt. Sollte man mehrere Dateien gleichzeitig öffnen, erscheinen über dem Quelltext mehrere Reiter, die mit dem jeweiligen Dateinamen beschriftet sind. Es ist möglich, das mittlere Fenster erneut zu teilen und somit mehrere Dateien gleichzeitig zu betrachten, was den Vergleich von Quellcode wesentlich erleichtert.

Andreas M. Bachmayer 7 Material und Methoden Am unteren Rand der Entwicklungsumgebung befindet sich der dritte Bereich, der Statusmeldungen anzeigt. Hier wird z.b. der momentane Status des ANDROID Emulators angezeigt. 2.3. Erklärung der Verzeichnisstrukturen Wenn man ein neues ANDROID Projekt in ECLIPSE anlegt, wird der Standard Verzeichnis Baum für die ANDROID-Anwendung automatisch generiert. Das Verzeichnis auf der höchsten Ebene erhält den Namen des Projekts, es enthält die Datei AndroidManifest.xml. In der Verzeichnis Ebene darunter werden die Ordner src, gen, Google APIs, assets und res erstellt. In ANDROID heißt eine Bildschirmansicht Activity. Wenn eine solche Activity gestartet wird, ändert sich die Benutzeroberfläche auf dem Endgerät. Diese Activities werden vom Programmierer erstellt und können beliebig benannt werden. Alle Activities, die in der Applikation genutzt werden sollen, müssen in der Datei AndroidManifest.xml aufgelistet werden, damit das Betriebssystem weiß, dass sie existieren. Des Weiteren werden in dieser Datei Freigaben auf externe Ressourcen, wie das Internet oder den GPS Empfänger, hinterlegt. Auch der Zugriff auf Bibliotheken wie GOOGLE-Maps wird hier freigegen. Der Name des Ordners src steht für Sources, hier werden alle Java Dateien für die Applikation abgelegt. Da jede Activity eine eigene Klasse darstellt, gibt es hier mindestens so viele Dateien wie Activities in der Applikation genutzt werden. Diese Dateien steuern das Verhalten der Software. Alle Benutzereingaben, die über den Touchscreen oder Tasten des Gerätes getätigt werden, werden hier überwacht und verarbeitet. Die Klassen, die hier genutzt werden, sind meist Unterklassen der Klasse View (siehe 2.3.1), die von den ANDROID APIs zur Verfügung gestellt wird. Jeder View benötigt eine.xml Datei, die sein Layout definiert. Sie befindet sich im Ordner res/layout/. Im Ordner gen befindet sich nur die Datei R.java. Sie wird von der Entwicklungsumgebung automatisch erstellt und aktualisiert. In ihr werden alle von der Applikation

Andreas M. Bachmayer 8 Material und Methoden genutzten Variablen hinterlegt und mit einem Hexadezimalcode versehen. Von der manuellen Abänderung wird dringendst abgeraten. GOOGLE APIs enthält alle APIs, die von GOOGLE zur Verfügung gestellt werden. Auch hier bedarf es keines Zutuns des Programmierers, die Entwicklungsumgebung erstellt und füllt diesen Ordner abhängig davon, welche APIs im ANDROID Manifest eingebunden werden. Der Ordner res für Resources beinhaltet die Daten, die von der Applikation zum Betrieb benötigt werden. Er hat die Unterordner drawable-hdpi, drawable-mdpi, drawable-ldpi, layout und values. In den drei drawable Ordnern werden die Grafiken, die die Applikation verwenden soll, hinterlegt. Hdpi steht für high dots per inch, hier werden Grafiken für Geräte mit einer Bildschirmauflösung von 800 x 480 Pixeln und mehr gespeichert. Mdpi steht für medium dots per inch, ldpi für low dots per inch. Die Grafiken im jeweiligen Ordner sollten für eine Bildschirmauflösung von 480 x 320 (mdpi) bzw. 320 x 240 (ldpi) ausgelegt sein. Durch diese drei Ordner lässt sich die Applikation sehr schön für verschiedene Bildschirmauflösungen anpassen, da das jeweilige Endgerät automatisch die passende Grafik lädt. Ein Nachteil der vielen Grafiken ist der Speicher: je mehr Grafiken in verschiedenen Auflösungen hinterlegt werden umso speicherintensiver wird die Applikation, es muss ein geeigneter Mittelweg gesucht werden. Wie in der Erklärung zum Ordner src schon erwähnt, werden im Order Layout.xml Dateien hinterlegt, die das Aussehen eines Views definieren. Diese.xml Dateien werden immer am Anfang der.java Datei, die eine Activity steuert, eingebunden. Hat man also mehrere Activities, die dasselbe Layout bekommen sollen, so kann man die.xml Datei mehrfach einbinden. Ist dies nicht der Fall, muss für jede Activity eine eigene Layout-xml Datei erstellt werden. Im Ordner Values können Konstanten oder Inhalte abgelegt werden. In der Regel werden auch hier.xml Dateien verwendet. Sehr hilfreich ist es, hier Dinge zu definieren, die sich, wenn sie geändert werden in der ganzen Applikation ändern sollen, zum Beispiel die Hintergrundfarben und Schriftgrößen für Texte oder Überschriften.

Andreas M. Bachmayer 9 Material und Methoden 2.3.1. Views Die wichtigsten Views sind: Webview, Linear Layout, Realtiv Layout, Listview, Mapview, Gridview und Gallery. Das Layout der Views selbst wird als.xml Datei im Ordner Layouts hinterlegt und am Anfang jeder Activity eingebunden. Der WebView ist ein sehr mächtiges Werkzeug, da es dem Programmierer die Möglichkeit bietet, Webinhalte direkt in die Applikation einzubinden. Eigentlich wird hier der Betriebssystem interne Browser aufgerufen, allerdings gibt es die Möglichkeit, Browserelemente, wie Adresszeile und Steuerelemente, auszublenden. Somit kann man dem Anwender bei entsprechender Gestaltung der Webinhalte den Eindruck vermitteln, dass die Inhalte von der Applikation geliefert werden. Tatsächlich ruft die Applikation die Inhalte aber aus dem Internet ab, so dass der Programmierer sehr komfortabel die Möglichkeit hat, die Inhalte zu ändern, ohne dass auf jedem Gerät ein Update der Applikation durchgeführt werden muss. Der Internetzugriff erfolgt hierbei keineswegs ohne Wissen des Anwenders, da er bei Installation der Software automatisch darauf hingewiesen wird, dass die Anwendung Internetzugriff erfordert. Mit dem Linear Layout ist es möglich, Bildschirmelemente direkt hintereinander zu platzieren. Je nach Größe des Objektes und Bildschirmauflösung werden die Objekte dann nebeneinander oder untereinander angezeigt. Das Betriebssystem füllt immer die volle Breite des Bildschirms von links nach rechts aus und springt wieder an den linken Bildschirmrand, sobald das nächste Objekt nicht mehr auf den Bildschirm passt, vergleichbar mit Text in einem Textverarbeitungsprogramm, das auf linksbündig eingestellt ist. Das Relative Layout ist die leistungsstärkere Version des Linear Layouts. Hier wird die Position der Elemente auf dem Bildschirm und deren Größe nicht in absoluten Zahlen angegeben, sondern in prozentualen Anteilen der Bildschirmnutzung und relativ zu den anderen Objekten auf der Oberfläche. Man kann z.b. angeben: Grafik 1 befindet sich links oben auf dem Bildschirm, belegt 30% der Breite und 10% der Höhe des Bildschirms. Grafik 2 befindet sich rechts von Grafik 1 und belegt den Rest der zur Verfügung stehenden Bildschirmbreite. Man kann auch auf die Angaben der Prozentzahlen verzichten und den Objekten ein Gewicht zuweisen. Wenn Grafik 1 z.b. das Gewicht 2 und Grafik 2 das Gewicht 1 bekommt, würde Grafik 1 ²/ 3 und

Andreas M. Bachmayer 10 Material und Methoden Grafik 2 1 / 3 des Bildschirmes füllen. Durch die automatische Skalierung der Objekte durch das Betriebssystem, wird die Anwendung auch auf Geräten mit verschieden Bildschirmauflösungen immer richtig angezeigt, was beim Linear Layout nicht immer zu erreichen ist. Der Listview generiert eine scrollbare Liste auf dem Bildschirm. Die einzelnen Positionen der Liste werden aus einem String-Array, das in der zugehörigen.xml- Layoutdatei abgelegt ist, bezogen. Das String Array kann auch dynamisch erzeugt werden. Dies wird z.b. beim Anzeigen einer Liste von Kontakten genutzt. Hier wird eine Anfrage an das Betriebssystem gestellt. Das Betriebssystem erstellt dann automatisch das String Array aus den auf dem Telefon hinterlegten Kontakten, so dass der ListView in der Lage ist, diese anzuzeigen. Auch in Formularen, wo z.b. ein Ländername für die Adressangabe ausgewählt werden muss, wird der ListView häufig verwendet. Der Mapview ist die wohl am häufigsten genutzte GOOGLE API. Sie bindet den Kartendienst GOOGLE Maps in die Applikation ein. Den Umfang, in dem die Karten genutzt werden können, bestimmt hierbei der Programmierer. Die Standard Ansicht ist ein verschiebbarer Kartenausschnitt auf einem festgelegten Zoomlevel. Relativ einfach können die Zoomfunktion und eine Startposition über Längen und Breitegrade implementiert werden. Mit etwas mehr Programmieraufwand kann die Karte mit Schichten überlagert werden, auf denen z.b. Symbole angezeigt werden. Zum Beispiel könnte hier ein Firmenlogo an den verschiedenen Standorten der Firma eingeblendet werden. Die Positionierung der Logos erfolgt ebenfalls mittels Längen- und Breitengeraden, die wiederum von einem Array zur Verfügung gestellt werden können. Auch die Programmierung eines eigenen Navigationssystems wird durch die Überlagerung mit einer Schicht bewerkstelligt. Auf den Algorithmus zum Suchen der Route kann hierbei als API zugegriffen werden, es handelt sich also lediglich um die grafische Gestaltung des Navigationssystems. Der Gridview bietet die Möglichkeit, mehrere Objekte in einem Gitter anzuordnen; dabei können die Anzahl der Zeilen und Spalten angegeben werden. Die Größe der Objekte wird hierbei abhängig von Spalten- und Zeilenzahl verändert.

Andreas M. Bachmayer 11 Programmerläuterung Galerie ist eine Ansicht, die das gleiche Design wie das vom Betriebssystem zur Verfügung gestellte Programm zum Verwalten und Betrachten von Bildern aufweist. Sie ermöglicht dem Anwender, komfortabel Bilder zu betrachten. 3. Programmerläuterung 3.1. Überblick Das Programm wird mit GrosshadernActivity gestartet. Sie bildet die Startseite der Applikation. Von hier aus werden die Untermenüs der Applikation aufgerufen. Es gibt die Möglichkeiten, Kliniken aufzurufen, dadurch wird die Activity Kliniken_liste.java gestartet. Wird eine Klinik aus der Liste ausgewählt, wird Webview.java gestartet. Der Webview bekommt eine Webseite und einen Parameter mit dem Namen der Klinik übergeben. Notfälle und Kontakt startet ebenfalls Webview.java, mit je einer anderen Webadresse. Der Weg zu uns startet Maps.java, was GOOGLE-Maps mit den GPS-Koordinaten des Klinikum Großhaderns anzeigt. Der letzte wählbare Punkt ist Impressionen, was ImpressWebView.java startet und eine Webseite mit Bildern des Klinikums anzeigt.

Andreas M. Bachmayer 12 Programmerläuterung 3.2. Programmablaufdiagram Programmstart Kliniken Notfälle Kontakt (Pforte) Der Weg zu uns Impressionen öffnet öffnet öffnet öffnet öffnet Klinik 1,2 n Text / HTML Text / HTML Text / HTML Text / HTML öffnet Text / HTML Für ANDROID Geräte: Zurück -Taste / nach rechts wischen öffnet klick auf dem Touchscreen 12

Andreas M. Bachmayer 13 Programmerläuterung 3.3. Quellcodeerläuterung 3.3.1. GroßhadernActivity GroßhadernActivity ist die übergeordnete Java Datei, von der aus die nächsten Activities aufgerufen werden. Im Folgenden werden die einzelnen Schritte, die der Quellcode bewirkt erklärt. import android.app.activity; import android.os.bundle; import android.view.view; import android.content.intent; Mit dem import Befehl werden Bibliotheken eingebunden, die Standard Funktionen zur Verfügung stellen. Z.B. könnte hier eine Quadratwurzelfunktion aus einer Bibliothek verwendet werden, anstatt diese Funktion selbst zu schreiben. publicclass GrosshadernActivity extends Activity Diese Zeile erstellt die Klasse GrosshadernActivity, die die Klasse Activity erweitert. Darauf folgen geschweifte Klammern, in denen der eigentlich Programmcode dieser Datei geschrieben wird. @Override publicvoid oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.main); Der @Override Befehl Bewirkt, dass evtl. existierende Funktionen, die denselben Namen haben, von der aktuellen Funktion überschrieben werden. Die Funktion bekommt ein Bundle mit Namen savedinstancestate übergeben. SetContentView lädt aus dem Layout Verzeichnis die entsprechende xml-datei, in diesem Fall main.xml. 13

Andreas M. Bachmayer 14 Programmerläuterung Um den weiteren Aufbau des Programms verstehen zu können, muss man zunächst einen Blick auf die main.xml Datei werfen. Beispielhaft wird hier der Teil von main.xml gezeigt, der für die Darstellung des Kliniken-Buttons zuständig ist. Der Einfachheit halber werden die Funktionen direkt hinter der Code Zeile in grün erklärt.... <! Kliniken > <LinearLayout android:orientation="horizontal" //Bildschirmorientierung horizontal android:layout_width="match_parent" //Bildschirmbreite wird voll ausgenutzt android:layout_height="wrap_content"> //Bildschirmhöhe inhaltsangepasst <TextView android:id="@+id/kliniken" //Name des Objekts ist klinik android:text="kliniken" //Angezeigter Text = Kliniken android:gravity="center_horizontal" //Ausrichtung = Zentriert android:textsize="@dimen/text_size_linear" //Textgröße in Variable Text_size_linear android:textcolor="@color/linear_layout_text_color" //Textfarbe in Variable linear_layout_text_color android:layout_width="match_parent" //Volle Bildschirmbreite wird genutzt android:layout_height="wrap_content" //Höhe wird an Inhalt angepasst android:onclick="click_handler" //beim Klicken Funktion click_handler aufrufen android:clickable="true" //Objekt ist anklickbar android:layout_weight="50"/> //Objekt hat das relative Gewicht 50 </LinearLayout> 14

Andreas M. Bachmayer 15 Programmerläuterung Wird nun einer der Schalter auf der Startseite über den Touchscreen ausgelöst, wird die Funktion click_handler aufgerufen und an sie eine View Variable gesendet mit dem Inhalt, der in der Layout Datei unter android:id festgelegt wurde. Anschließend durchläuft diese Variable eine switch/case Struktur, in der sich der Fortlauf des Programms entscheidet. publicvoid click_handler(view view) Hier sollen nur die ersten beiden cases kurz erläutert werden.... switch (view.getid()) // ListederKlinikenaufrufen case R.id.kliniken: Intent kliniken = new Intent (this, Kliniken_liste.class); startactivity (kliniken); break;... // WebseitefürNotfaelleaufrufen case R.id.notfaelle: Intent notfaelle = new Intent (this, Webview.class); string webadress = new String ("http://www.drbachmayer.de/test/notfall.html?notfall"); notfaelle.putextra("web", webadress); startactivity (notfaelle); break; Die Switch Funktion ermittelt über view.getid(), welcher der Schalter betätigt wurde, und führt dem entsprechend die Funktionen aus. Im Fall kliniken wird nur ein neuer Intent mit Namen kliniken erstellt und gestartet. Damit wird in die Activity Kliniken_liste gewechselt. Wenn notfaelle übergeben wird, wird sowohl der Intent notfaelle erstellt, als auch ein String webadress, der die zu öffnende Webadresse beinhaltet. Da man beim Starten einer Activity nicht direkt einen Parameter übergeben kann, hier wäre dass die Webadresse, bedient man sich der Funktion putextra. Hier wird an den Intent noch die Variable webadress angehängt. 15

Andreas M. Bachmayer 16 Programmerläuterung 3.3.2. Webview Mit der 1. Zeile wird wieder die Klasse erzeugt. Die Webview Klasse erweitert ebenfalls die Klasse Activity. publicclass Webview extends Activity Als nächstes wird ein Webview mit dem Name mwebview erstellt, der im weiteren Programmverlauf konfiguriert werden kann. Die oncreate Funktion sorgt wie in jeder.java Datei für den Aufruf des für diese Activity festgelegten Layout File, hier die webview.xml. //Einen Webview erstellen WebView mwebview; @Override publicvoid oncreate(bundle savedinstancestate) // wird immer aufgerufen, wenn die Activity gestartet wird super.oncreate(savedinstancestate); setcontentview(r.layout.webview); Nun wird zunächst ein Bundle mit dem Namen webadr erstellt. Diese Variable dient als Zwischenspeicher für alles, was dem Intent zum Start der Activity mitgegeben wurde. Über getintent().getextras(), werden alle übergebenen Extras im Bundel webadr abgelegt. Da in der Datei GrosshadernActivity.java im Befehl.putExtra der Variablen webadress der Zugriffsname web zugewiesen wurde, kann nun über webadr.getstring( web ) auf diese Variable im Bundle webadr zugegriffen werden. Die übergebene Webadresse wird in der Variable webadress vom Typ String abgelegt. //aus dem Bundle die als Extras übergebene Webadresse herausziehen Bundle webadr = getintent().getextras(); String webadress = newstring(webadr.getstring("web")); Nun kommt die kommt die Konfiguration des Webviews. Die Layoutdatei ist denkbar einfach, sie legt lediglich fest, dass der Webview den kompletten Bildschirm ausfüllen soll. Über den Befehl getsettings().setjavascriptenabled(true) wird Javascript im Webview zugelassen und loadurl gibt die Webseite an, die im Webview zu öffnen ist. 16

Andreas M. Bachmayer 17 Programmerläuterung //den Webview aufbauen mwebview = (WebView) findviewbyid(r.id.webview); mwebview.getsettings().setjavascriptenabled(true); mwebview.loadurl(webadress); //Methode zur Browsersteuerung aufrufen mwebview.setwebviewclient(new MyWebViewClient()); Die letzte Zeile im Konfigurationsteil für den Webview ruft eine Funktion auf, die verhindert, dass die aufgerufene Webseite vom Betriebssystem als solche erkannt wird und damit die Frage gestellt wird, ob sie im Standardbrowser geöffnet werden soll. //verhindern, dass die Webseiten im Standardbrowser geöffnet werden privateclass MyWebViewClient extends WebViewClient @Override publicboolean shouldoverrideurlloading(webview view, String url) view.loadurl(url); returntrue; Als letzter Schritt in dieser Datei wird die Zurück-Taste des Endgerätes eingebunden, die es ermöglicht eine Webseite zurückzuspringen, falls mehrere Webseiten hintereinander geöffnet wurden. //Die Zurück Taste einbinden, falls es einen Webseitenverlauf gibt @Override publicboolean onkeydown(int keycode, KeyEvent event) if ((keycode == KeyEvent.KEYCODE_BACK) &&mwebview.cangoback()) mwebview.goback(); returntrue; returnsuper.onkeydown(keycode, event); (4) 3.3.3. Kliniken_liste Mit dieser Datei wird aus einem String-Array eine Liste erzeugt. Beim Anklicken eines Elements in der Liste wird dessen Namen ermittelt und eine Webseite geöffnet. Der Name des Listenelements wird der Webseite als Parameter übergeben. 17

Andreas M. Bachmayer 18 Programmerläuterung Zunächst wird die Klasse erstellt und anschließend der oncreate Befehl vorbereitet. publicclass Kliniken_liste extends ListActivity // wird immer aufgerufen, wenn die Activity gestartet wird publicvoid oncreate(bundle list) super.oncreate(list); Eine kleine Besonderheit bei der Liste ist, dass die Elemente, die in der Liste erscheinen sollen, zunächst aus dem Ordner res und dort speziell aus einem String- Array geladen werden müssen. Da es sehr einfach möglich ist, das String-Array um weitere Elemente zu ergänzen, kann die Liste sehr komfortabel geändert werden. Beim Laden der Daten wird ein neues Array erstellt mit dem Namen kliniken_all, nicht zu verwechseln mit dem String-Array im res Ordner. Es ist in blau geschrieben und hat denselben Namen, ist aber nicht dasselbe Array. Anschließend wird mit den Daten aus dem neu erzeugten String-Array mittels eines vom Betriebssystem zur Verfügung gestellten Adapters die Liste erstellt und mit Inhalten gefüllt. //String Array aus den Ressourcen laden Resources res = getresources(); String[] kliniken_all = res.getstringarray(r.array.kliniken_all); //den ausgelesenen String auf die Liste anwenden this.setlistadapter(new ArrayAdapter<String>(this, R.layout.kliniken_list, R.id.label, kliniken_all)); Am Ende der Datei wird die Benutzereingabe verarbeitet. Die Funktion onlistitemclick aus der übergeordneten Klasse wird modifiziert, sie bekommt einen List- View, einen View, einen Integer und einen Long übergeben. Es wird ein Object o erstellt, in dem über den Listenadapter die Position des angeklickten Elements abgelegt wird. Im nächsten Schritt wird diese Position mit o.tosring() in einen String umgewandelt, der den Namen des geklickten Elements enthält und in der Variablen keyword ablegt wird. Im String webadress werden dann die statische Webadresse und die Variable keyword miteinander zu einer durch ein? getrennten ULR verschmolzen. Im letzten Schritt wird der Webview gestartet und die URL, wie schon in GroßhadernActivity erklärt, über.putextra übergeben. 18

Andreas M. Bachmayer 19 Programmerläuterung @Override protectedvoid onlistitemclick(listview l, View v, int position, long id) super.onlistitemclick(l, v, position, id); // Die angeklickteklinkikherausziehen Object o = this.getlistadapter().getitem(position); String keyword = o.tostring(); String webadress = new String ("http://www.dr bachmayer.de/test /klinik.htm?"+ keyword); Intent oncreate = new Intent (this, Webview.class); oncreate.putextra("web", webadress); startactivity (oncreate); 3.3.4. Öffnen der Webseiten der einzelnen Kliniken Die Webseite der einzelnen Kliniken ist auf einem Server hinterlegt und wird im Moment des Aufrufs durch den Benutzer durch ein Javascript erstellt. Das Javascript ist in eine HTML-Seite eingebettet und greift auf eine xml-datei zu, die die Informationen zu allen Kliniken enthält. Anhand des übergebenen Kliniknamens sucht das Javascript in der xml-datei den passenden Datensatz und erstellt die HTML Seite danach. Auf diese Weise haben die Webseiten alle das gleiche Layout, aber die enthaltenen Informationen wie Telefonnummern oder Adressen ändern sich. Zunächst wird getestet ob nach dem? etwas steht, ist dies der Fall, wird der Inhalt in der Variablen tmp abgelegt und dann mit tmp.slice(1) die erste Stelle des Strings, das?, weggeschnitten. Wird kein Parameter übergeben wird eine Fehlermeldung ausgegeben. if (location.search!= "") var tmp=(location.search); var clinic=(tmp.slice(1)); else alert ("Fehler bei der Parameterübergabe"); Als nächstes wird die xml-datei geöffnet, das Anzeigen im Browser aber unterdrückt. xmlhttp.open("get","http://www.dr bachmayer.de/test/inhalt_kliniken.xml",false); 19

Andreas M. Bachmayer 20 Programmerläuterung Alle folgenden document.write Befehle schreiben reinen HTML Code, der eine Tabelle darstellt, die mit den Inhalten aus der xml-datei gefüllt wird. Das Füllen der Tabelle funktioniert über die Variable x. In der Variable x werden alle Informationen über die gewünschte Klinik abgelegt. Dies geschieht über xml- Doc.getElementsByTagName(clinic). Clinic ist die an das Javascript übergebene Variable, die den Namen der Klinik enthält, somit ist es der möglich, die betreffende Klinik herauszufiltern. Mit der darauf folgen for-schleife wird die Variable x solange durchlaufen, bis das Ende erreicht ist. Dadurch, dass der Zähler i dabei immer um eins erhöht wird, ist das, was zurückgeliefert wird immer etwas anderes. Man kann also sagen, dass die xml-datei Zeile für Zeile überprüft wird, ob dort die gewünscht Information vorhanden ist. Mit dem letzten Befehl wird die HTML-Tabelle geschlossen. document.write("<table width='100%' border='0'>"); var x=xmldoc.getelementsbytagname(clinic); for (i=0;i<x.length;i++) document.write("<tr><td colspan='2' align='center'><strong>"); document.write(x[i].getelementsbytagname("name")[0].childnodes[0].nodevalue); document.write("</strong></td></tr><tr><td colspan='2' align='center'>director:"); document.write("</td><tr><td colspan='2' align='center'><p><img src='"); document.write(x[i].getelementsbytagname("picture")[0].childnodes[0].nodevalue); document.write("</table>"); Die Struktur der xml-datei kann im Anhang eingesehen werden. 3.3.5. Maps In der Datei Maps.java wird das Verhalten der Kartenansicht definiert. Zunächst wird die Klasse erstellt, die eine Unterklasse von MapActivity ist. Als nächstes wird eine Funktion zum Kontrollieren der Activity erstellt, die hier zusätzlich festlegt, dass eine Route auf der Karte angezeigt werden kann, weitere Möglichkeiten der Funktion mapcontroller kommen aus Bibliotheken. 20

Andreas M. Bachmayer 21 Programmerläuterung publicclass Maps extends MapActivity private MapController mapcontroller; @Override protectedboolean isroutedisplayed() returntrue; In der oncreate Funtion wird zunächst die xml-datei für das Layout der Karte eingebunden. Diese Layoutdatei beinhaltet im Wesentlichen die Lizenz von GOOGLE, die es ermöglicht, das Kartenmaterial aus dem Internet abzurufen. Die restlichen Einstellungen für die Karte werden in der Java-Datei selbst definiert bzw. sind von der MapView API vorgegeben. Am Ende der Datei wird noch ein GeoPoint definiert, das sind hier die GPS Koordinaten des Klinikums Großhadern in Micrograd. Mit.animateTo(), wird die Startposition der Karte auf diesen GeoPoint festgelegt. Der letzte Befehl.setZoom() legt fest, in welcher Höhe über dem Erdboden die Kartenansicht gestartet wird. @Override publicvoid oncreate(bundle savedinstancestate) super.oncreate(savedinstancestate); setcontentview(r.layout.maps); // MapViewstarten MapView mapview = (MapView) findviewbyid(r.id.mapview); mapview.setbuiltinzoomcontrols(true); //Mapcontrollereinstellen mapcontroller = mapview.getcontroller(); GeoPoint point = newgeopoint(48111643, 11471400); mapcontroller.animateto(point); mapcontroller.setzoom(16); 21