DIPLOMARBEIT. Minh Quan Hoang



Ähnliche Dokumente
1. Software-Plattform Android Android. Was ist Android? Bibliotheken, Laufzeitumgebung, Application Framework

1. Software-Plattform Android Android. Was ist Android? Managed Code, Angepasste Java Virtual Machine

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

2. ERSTELLEN VON APPS MIT DEM ADT PLUGIN VON ECLIPSE

Lizenzen auschecken. Was ist zu tun?

DOKUMENTATION VOGELZUCHT 2015 PLUS

Anleitung zur Nutzung des SharePort Utility

Ein mobiler Electronic Program Guide für Android

Seminar Multimediale Werkzeuge Sommersemester 2011

Revox Joy S232 App D 1.0

GMM WLAN-Transmitter

Synchronisations- Assistent

SEMINARVORTRAG ANDROID ENTWICKLUNG ETIENNE KÖRNER EMBEDDED SYSTEMS SS HSRM

Bilder zum Upload verkleinern

Tipps und Tricks zu den Updates

Android GUI Entwicklung

Autorisierung. Sicherheit und Zugriffskontrolle & Erstellen einer Berechtigungskomponente

Anleitung zum Prüfen von WebDAV

Naviki GPS-Anwendungsentwicklung für Mobiltelefone

Präsentation Von Laura Baake und Janina Schwemer

OpenVPN unter Linux mit KVpnc Stand: 16. Mai 2013

SRH - Kurzinformation

Windows 10 > Fragen über Fragen

Installation der SAS Foundation Software auf Windows

ROFIN App Benutzerhandbuch. Version 1.0

Dokumentation Schedulingverfahren

Windows 8 Lizenzierung in Szenarien

schnell und portofrei erhältlich bei beck-shop.de DIE FACHBUCHHANDLUNG mitp/bhv

Ein mobiler Electronic Program Guide

EasyWk DAS Schwimmwettkampfprogramm

WLAN. 1. Definition. 3. Nutzungsmöglichkeiten

4.1 Download der App über den Play Store

Standortbericht bintec elmeg GmbH

ISA Server Best Practice Analyzer

Lokale Installation von DotNetNuke 4 ohne IIS

KNX BAOS Gadget. Installations- und Bedienanleitung. WEINZIERL ENGINEERING GmbH. DE Burgkirchen Web:

Benutzung der LS-Miniscanner

Workshop: Eigenes Image ohne VMware-Programme erstellen

Zugriff Remote Windows Dieses Dokument beschreibt die Konfiguration von Windows für den Zugriff auf

TimeMachine. Time CGI. Version 1.5. Stand Dokument: time.odt. Berger EDV Service Tulbeckstr München

Kleines Handbuch zur Fotogalerie der Pixel AG

GeoPilot (Android) die App

Installation und Inbetriebnahme von SolidWorks

Updatehinweise für die Version forma 5.5.5

Beschreibung und Bedienungsanleitung. Inhaltsverzeichnis: Abbildungsverzeichnis: Werkzeug für verschlüsselte bpks. Dipl.-Ing.

Dokumentation: Balanced Scorecard

Samsung Large Format Display

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

BSV Software Support Mobile Portal (SMP) Stand

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand:

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Nutzung der VDI Umgebung

Anleitung für das Einrichten eines SIP-Accounts (Registrierung einer VoiP- Nummer) im Softphone SJPhone für Windows Mobile

Datenübernahme von HKO 5.9 zur. Advolux Kanzleisoftware

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

WLAN Konfiguration. Michael Bukreus Seite 1

E-Cinema Central. VPN-Client Installation

So nutzen Sie die HiDrive App mit Ihrem Android Smartphone

Anwenderdokumentation PersoSim

Dropbox Schnellstart. Was ist Dropbox? Eignet sich Dropbox für mich?

Auto-Provisionierung tiptel 30x0 mit Yeastar MyPBX

Installation SQL- Server 2012 Single Node

Swisscom TV Medien Assistent

Update und Konfiguraton mit dem ANTLOG Konfigurations-Assistenten

SANDBOXIE konfigurieren

Übung: Verwendung von Java-Threads

IVE-W530BT. Bluetooth Software Update Manual mit Android Telefonen

Local Control Network Technische Dokumentation

CADEMIA: Einrichtung Ihres Computers unter Windows

Fragen und Antworten. Kabel Internet

App-Entwicklung für Android

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

LED WIFI Controller - Bedienungsanleitung

TeamSpeak3 Einrichten

Computeria Solothurn

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

App Entwicklung für Android F O R T G E S C H R I T T E N E P R O G R A M M I E R U N G I N J A V A

Dokumentation von Ük Modul 302

4D Server v12 64-bit Version BETA VERSION

Betriebshandbuch. MyInTouch Import Tool

GSM Scanner Bedienungsanleitung

Tipps und Tricks zur Installation von Java-basierten Programmen auf Handys

Kommunikationsübersicht XIMA FORMCYCLE Inhaltsverzeichnis

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

Python SVN-Revision 12

Datei Erweiterungen Anzeigen!

Walkabout: Location Based Services mit Android und dem Google Phone

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

IT- Wir machen das! Leistungskatalog. M3B Service GmbH Alter Sportplatz Lake Schmallenberg

Support-Tipp Mai Release Management in Altium Designer

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

Netzwerk einrichten unter Windows

OP-LOG

Übungen zur Android Entwicklung

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

ErstE schritte mit EntErtain to go

Handbuch : CTFPND-1 V4

KIP Druckerstatus Benutzerhandbuch KIP Druckerstatus Installations- und Benutzerhandbuch

Transkript:

Fakultät Informatik, Institut für Systemarchitektur, Professur Rechnernetze DIPLOMARBEIT Eingereicht von: Minh Quan Hoang Matrikel-Nr.: 2982710 Konzeption und prototypische Implementierung einer Software für das Betriebssystem Android zur Messung von WLAN-Abdeckungen (Site Survey) Betreuer: Dr. rer. nat. Dietbert Gütter Betreuender HSL.: Prof. Dr. habil. Alexander Schill Abgabedatum: 14.03.2012

2

ERKLÄRUNG Ich erkläre, dass ich die vorliegende Arbeit selbständig, unter Angabe aller Zitate und nur unter Verwendung der angegebenen Literatur und Hilfsmittel angefertigt habe. Dresden, den 14.03.2012 Minh Quan Hoang 3

4

AUFGABENSTELLUNG 5

6

DANKSAGUNG Ein herzliches Dankeschön geht an alle, die mich bei der Erstellung meiner Diplomarbeit unterstützt haben. Ganz besonders Bedanken möchte ich mich bei Herrn Prof. Dr. rer. nat. habil. Dr. h. c. Alexander Schill und Herrn Dr. rer. nat. Diebert Gütter für die tatkräftige Unterstützung und Betreuerung bei der Erstellung meiner Diplomarbeit. Vielen Dank für die hilfreichen Anregungen und die Geduld. Auch bei Herrn Dr. rer. nat. Diebert Gütter möchte ich mich nochmals für das vielen Stunden Korrekturlesen bedanken. Zudem möchte ich meinen Eltern danken, die mich nicht nur finanziell, sondern auch moralisch immer unterstützt und mir den Rücken gestärkt haben. 7

8

INHALTSVERZEICHNIS Diplomarbeit... 1 Erklärung... 3 Aufgabenstellung... 5 Danksagung... 7 Inhaltsverzeichnis... 9 Kapitel 1: Einleitung... 11 1.1. Motivation... 11 1.2. Anforderung und Zielsetzung... 11 1.3. Gliederung... 11 Kapitel 2: Grundlagen... 13 2.1. WLAN... 13 2.1.1. Reichweite von WLAN... 14 2.1.2. Dämpfung, Strahlung und Störende Einflüsse... 15 2.1.3. Sendeleistung... 16 2.2. Android... 17 2.2.1. Grundlagen und Eigenschaften von Android... 18 2.2.2. Programmierung für Android... 25 2.3. Verwandte Arbeit Stand der Technik... 29 Kapitel 3: Konzept Theorie der Arbeit... 31 Kapitel 4: Implementierung... 33 4.1. Überblick des Programms... 33 4.2. Darstellung das Programmlayout... 34 4.2.1. Layout von Programmoberfläche... 34 4.2.2. Layout zur Grafikdateidarstellung... 34 4.3. Funktionen... 36 4.3.1. Activity Initialisierung... 36 4.3.2. MapView... 37 Kapitel 5: Validierung und Bewertung... 49 5.1. Validierung... 49 9

5.2. Bewertung... 51 Kapitel 6: Zusammenfassung und Ausblick... 53 6.1. Zusammenfassung... 53 6.2. Ausblick... 53 Anhang... 54 1. Android- Marktanteil... 54 2. Applikations- und Spielanzahl... 55 3. Wachstumsdiagramm... 56 4. Kostenlose und kostenpflichtige Applikationen... 56 5. Versionsverteilung in 2010... 57 Abbildungsverzeichnis... 58 Tabellenverzeichnis... 60 Formelverzeichnis... 61 Code-Listing... 62 Literatur... 63 10

KAPITEL 1: EINLEITUNG 1.1. Motivation Kaum ein Bereich der Informationstechnologie entwickelt sich gegenwärtig so sehr schnell wie Wireless - LAN (WLAN). WLAN kommt überall zum Einsatz wo Kabel unpraktisch wären. Die Forderungen von WLAN steigen immer in Richtung höheren Datendurchsatzes und größerer Reichweiten. Ein wichtiger Punkt, der im Zusammenhang mit WLAN - Netzwerken beachtet werden muss, sind die Sendeleistungen, Dämpfungen und die Reichweite von WLAN-Antennen. Demzufolge spielt die Abmessung der WLAN Signalstärke bei jeder Netzwerkinstallation eine große Rolle. 1.2. Anforderung und Zielsetzung Im Rahmen der Diplomarbeit sollen Möglichkeiten und Grenzen des Betriebssystems Android für o.g. Aufgabe untersucht werden. Dazu sind betriebssysteminterne Schnittstellen zu diskutieren, sowie die Nutzung frei verfügbarer Dienste, wie Google- Maps. Auf dieser Basis ist ein Programm zu realisieren, das Messwerterfassungen mit Hilfe von Smartphones bzw. Tablets realisieren kann, ebenso ein Auswerteprogramme für bürotypische Rechner. Anschließend soll eine verbesserte Version prototypisch konzipiert und implementiert werden, die eine verteilte Arbeit eines Planungsservers mit evtl. mehreren dezentralen Mess-Smartphones verwirklicht. Der Prototyp sollte für Demonstrationszwecke und für den Einsatz in der Lehre geeignet sein. 1.3. Gliederung In Kapitel 2 werden grundlegende Begriffe und die verwandte Forschungsarbeit erläutert. Das Kapitel bildet die Grundlagen von WLAN und Android. Kapitel 3 beschreibt die dazugehörigen Konzepte dieser Arbeit. Es befasst sich unter anderem mit dem Überblick der Arbeit und der Zusammenfassung der Grundidee. Im nächsten Kapitel (Kapitel 4) wird genauer auf die einzelnen Phasen der Implementierung eingegangen. Dabei handelt es sich um den Entwurf, die Gestaltung, das Layout sowie die Funktionen des Programms. Im vorletzten Kapitel (Kapitel 5) werden die Validierung und anschließend die Bewertung der durchgeführten Testschritte, wie zum Beispiel die Abmessung der WLANs in einem Standort, genauer beschrieben. 11

Im letzten Kapitel (Kapitel 6) werden nochmals alle wichtigen Punkte der Arbeit zusammengefasst. Dabei wird kurz auf die Ziele zurückgegriffen, die zu Beginn der Arbeit gesetzt wurden, welche Probleme bei den Untersuchungen entstanden, welche Lösungsvorschläge gebracht werden und welchen Ausblick es auf die Zukunft hat. 12

KAPITEL 2: GRUNDLAGEN 2.1. WLAN WLAN ist die Abkürzung für Wireless Local Area Network und bezeichnet ein lokales bzw. örtliches drahtloses Computernetzwerk. Heutzutage wird WLAN fast überall eingesetzt, um das Netzwerk in alle Bereiche zu tragen, ohne dabei Kabel verlegen zu müssen. WLAN ist eine sichere und einfache Lösung, um den Internet Zugang mittels eines mobilen Gerätes wie zum Beispiel: Notebook, PDA usw. zu ermöglichen. Laut [2] haben WLANs größere Sendeleistungen und Reichweiten im Gegensatz zum Wireless Personal Area Network (WPAN), und bieten im Allgemeinen höhere Datenübertragungsraten. Ein WLAN - Netzwerk basiert im Normalfall auf dem Standard "IEEE 802.11" und dessen Ergänzungen und Erweiterungen. IEEE ist die Abkürzung für "Institute of Electrical and Electronics Engineers" und stellt einen allgemein gültigen Industriestandard da. Ein WLAN-Netzwerk arbeitet mit einem sog. Frequenzband, welches sich in Abhängigkeit des eingesetzten IEEE-Standards unterscheidet. Innerhalb dieses Bandes sind die Frequenzen mit einer Breite von 10-30 MHz einem Kanal zugeordnet. Das bedeutet, dass je nach IEEE-Standard eine unterschiedliche Anzahl von Kanälen zur Datenübertragung zur Verfügung steht. [1] Die folgende Tabelle zeigt die wesentlichen Unterschiede der WLAN Standards: IEEE - Standard Frequenzband Übertragungsrate Anzahl der Kanäle maximale Sendeleistung 802.11 2,40 2,48 GHz 2 MBit/s 802.11a 5,15 5,725 GHz 54 MBit/s 19 30 dbm (1W) 802.11b 2,40 2,4835 GHz 802.11g 2,40 2,4835 GHz 11 MBit/s 11 14 20 dbm (100mW) 54 MBit/s 11 14 20 dbm (100mW) Tabelle 1: Die Parameter von WLAN Standards [1,4] 13

In der Praxis werden die IEEE Standards auf dem WLAN Router (Access Point 1 ) eingestellt. Wenn der WLAN Adapter von dem Client ein Netzwerk findet, übernimmt er automatisch alle Parameter von WLAN wie Standard, Frequenz und Kanal. Bei WLAN Netzwerken sind die Qualität des Funkgebietes und dessen Schnelligkeit sehr wichtig. Je weiter man sich von der Sendequelle entfernt, umso geringer wird die Übertragungsgeschwindigkeit. Im Zusammenhang mit WLAN Netzwerke zu beachtende wichtige Punkte sind Reichweite, Dämpfungen und die Sendeleistungen von WLAN Antennen. 2.1.1. Reichweite von WLAN Die Reichweiten bei WLAN sind von mehreren Faktoren abhängig, z.b.: Verwendete Frequenz Das Gelände, die Sichtverhältnisse sowie der Aufstellungsort der Antenne Antennengewinn und abgestrahlte Sendeleistung Dämpfung der Kabel Qualität der Geräte (WLAN Router / Access Points) Benötigte Übertragungsbandbreite Die Reichweite des Netzwerks lassen sich durch eine externe WLAN Antenne bei vielen Access Points und WLAN - Routern deutlich erhöhen, auch die Signalqualität. Selbstverständlich steigt der Datendurchsatz dadurch in den meisten Fällen auch. Abbildung 1: Ein Access Point versorgt möglichst hohes Gebiet 1 : Der Access Point ist eine zentrale Komponente von den WLAN Installationen, dient als funktechnischer Ersatz eines Hubs und spannt eine lokale Funkzelle auf. Zum drahtgebundenen Netz übernimmt der Access Point die Funktion einer Bridge. [3] 14

[1] gibt an, dass ein normale IEEE 802.11 WLAN Adapter ohne Besonderheiten eine Reichweite von etwa 30 100m im Freien haben. Mit aktueller Technik kann die Reichweite auf 90m in geschlossenen Räumen erhöht werden. [4] empfiehlt, dass man bei der Reichweitenbetrachtung immer eine Reserve einrechnen sollte, besonders wenn eine Verbindung über größer Strecken und im Freien aufgebaut wird, da Witterungseinflüsse, Vegetation oder sonstige Hindernisse, die eventuell auch nachträglich installiert werden, die Reichweite einschränken. 2.1.2. Dämpfung, Strahlung und Störende Einflüsse Um die Leistung anzugeben, die eine Antenne in Sende- und Empfangsrichtung bezogen auf eine Vergleichsantenne abgibt oder empfängt, benutzt man den Begriff Antennengewinn. Ein Antennengewinn wird in der Einheit dbi angegeben. Diese Angabe gibt bei WLAN-Antennen an, wie viel besser deren Sende- und Empfangsleistung ist im Vergleich zu einer Antenne, die in alle Richtungen gleichmäßig sendet [5]. Je höher der Antennengewinn desto mehr Leistung wird abgestrahlt und desto mehr wird das Empfangssignal verstärkt. Somit erhöht sich die Reichweite und der Datendurchsatz kann verbessert werden. Zur Verbesserung eine WLAN Verbindung kann es daher oft schon ausreichen, auf einer Seite der Funkverbindung eine WLAN Antenne mit höherem Gewinn zu installieren [4]. Dem Antennengewinn entgegen wirkt die Dämpfung des Antennen Kabels, der Stecker und Adapter. Je höher die Frequenz, desto größer wird die Dämpfung. Dickere Kabel haben in der Regel eine geringere Dämpfung. Um bei einem WLAN die maximale Reichweite zu erzielen, sollte man den Weg vom Sender (Router / Access Point) zur Antenne so kurz wie möglich halten und ein passendes Kabel mit niedriger Dämpfung verwenden. Abbildung 2: Diagramm zur Strahlungsintensität [2] 15

In der Nachrichtentechnik verwendet man oft die Maßeinheit Dezibel (db). Das Dezibel ist ein logarithmisches Maß und vereinfacht die Berechnung der Verstärkung, Leistung bzw. Dämpfung komplexer Systeme oder zusammenhängender Netzwerkkomponenten. Um die Verstärkung eines Gesamtsystems, bestehend aus Sender, Kabeln, Steckverbindungen und Antenne zu berechnen, werden lediglich die einzelnen db Werte addiert bzw. subtrahiert. Eine Veränderung um 3 db entspricht immer einer Verdoppelung bzw. Halbierung. Diese Angabe gibt bei WLAN Kabeln oder Steckern an, wie sehr sie die Funkwellen und damit die Sendeleistung dämpfen. Gewinn in db = 10 x log 10 (P Antenne / P Bezugsantenne ) Formel 1: Gewinnberechnung mittels Leistungen Die Einheit Dezibel Milliwatt (dbm) gibt einen Leistungspegel bezogen auf ein Milliwatt an. 0 dbm entsprechen einer Leistung von 1 mw. 20 dbm entsprechen 100 mw. dbm ist eine absolute Angabe. Normale WLAN Geräte senden etwa mit 17 dbm, das entspricht 50 mw. Diese Angabe gibt bei WLAN Geräten an, wie stark diese senden. [5] Allgemein können WLAN Netzwerke laut [1] durch folgende Hindernisse gestört werden: Leitbauwände (kleine Einschränkung) Metalle und Stahlbeton (große Einschränkung) Dicht belaubte Bäume (mittlere Einschränkung) Das Störpotential für WLAN Netzwerke steigt mit der elektrischen Leitfähigkeit des Störmaterials an. Je größer die Störung ist umso weiter sinkt die Sende- und Empfangsleistung und damit die Verbindungsgeschwindigkeit. 2.1.3. Sendeleistung Man bezeichnet die Sendeleistung häufig auch als Strahlungsleistung. Sendeleistung ist ein Leistungsmerkmal für jedes WLAN Gerät. [6] Je höher ihr Wert ist, desto größer ist auch die theoretische Reichweite. Die Sendeleistung wird in mw oder dbm angegeben. Die Umrechnung von mw nach dbm erfolgt über folgende Formel: L (dbm) = 10 x log 10 ( ) Formel 2: Sendeleistungsumrechnung Ein Beispiel von [6] zeigt die Berechnung der Sendeleistung aus Gerätekombination: ein Wireless Access Point D - Link DWL - 900AP+ mit einer Sendeleistung von 30 mw (ca. 14,77 db) und einer Empfindlichkeit von 79 db bei 11 Mbps, 2m langes RG 218 16

Kabel mit zwei Steckern, wobei das Kabel eine Dämpfung von 0,42 db aufweist und die beiden Stecker einen Verlust von 0,3 db verursachen, externe Antenne ANT24 0801 mit einem Antennengewinn (Gain) von 8,5 dbi. P Sendeleistung = Ausgangsleistung Kabeldämpfung Steckerdämpfung + Antennengewinn Formel 3: Sendeleistungsberechnung aus Gerätekombination Die Sendeleistung ergibt sich: P = 14,77 db 0,42 db 0,3 db + 8,5 dbi = 22,55 db 2.2. Android Android ist eine neuartige offene und auf dem Linux Betriebssystem basierende Plattform, welche die Entwicklung neuer Software und Applikationen für Handys und das mobile Internet unterstützen wird. Diese Plattform hat Google gemeinsam mit den Partnern T Mobile, HTC, Motorola und Qualcomm entwickelt. [10] Abbildung 3: Android Plattform für Handy und Tablet [12,11] Laut [12] kaufte Google den ursprünglichen Softwareentwickler, Android Inc., im Jahr 2005. Dann hat Android den Markt revolutioniert. Angaben des Marktforschungsunternehmens Gartner zufolge hatte Android als Smartphone Betriebssystem im dritten Quartal 2011 einen weltweiten Marktanteil von 52,5 Prozent. [9] Im Dezember 2011 gab Google an, dass 700.000 Android Geräte pro Tag aktiviert werden. 17

Abbildung 4: weltweite Marktanteil 2009 2 [8] gibt an, dass Android zu den innovativsten, intuitivsten und besten Betriebssystemen gehört, die es derzeit für Smartphone gibt. Der Market genannte App Store hat im Vergleich zu Apples Original aufgeholt, hat überdurchschnittlich viele kostenlose Anwendungen und mit dem Rückgaberecht die fairsten Bedingungen zu bieten. Im Anhang 1 werden weitere Informationen für das Betriebssystem Android beschrieben. 2.2.1. Grundlagen und Eigenschaften von Android 2.2.1.1. Android - Versionen In der nachfolgenden Tabelle werden alle Versionen von dem Android System mit Standard Funktionen sowie die Neuerungen aufgeführt: [9] Version Name Veröffentlichung Wesentliche Neuerungen 1.1 10. Februar 2009 Speichern von MMS-Anhängen 1.5 Cupcake 30. April 2009 automatischer Wechsel zwischen Hoch- und Querformat Bildschirm-Tastatur Aufnahme und Wiedergabe von Videos automatisches Verbinden und Stereo für Bluetooth 2 : http://www.canalys.com/pr/2010/r2010021.html 18

weitere Sprachen neben Englisch und Deutsch 1.6 Donut 15. September 2009 Virtual Private Networks konfigurierbar differenzierte Energieverbrauchssteuerung Suchfunktion quellenübergreifend und selbstoptimierend Text-to-Speech, Gestenerkennung und mehr als eine Bildschirmauflösung 2.0 Eclair 26. Oktober 2009 Digitalzoom und Unterstützung von Blitzlicht Unterstützung von Microsoft Exchange Bluetooth 2.1 2.1 12. Januar 2010 animierte Hintergrundbilder Informationen zur Signalstärke Erweiterungen von Webkit (HTML5- Unterstützungen, WebStorage, Geolocation, Video ) IPv6-Unterstützung 2.2 Froyo 20. Mai 2010 Linux-Kernel 2.6.32, der weniger Arbeitsspeicher benötigt Verwendung von Arbeitsspeicher, der größer als die bisher nutzbaren 256 MByte ist. JIT-Compiler, Erweiterungen für OpenGL ES 2.0, Unterstützung von Flash 10.1 Tethering Speicherbarkeit von Apps auf der SD-Karte (App2SD) Android Cloud to Device Messaging Framework: Möglichkeit, PUSH in die eigenen Anwendungen zu implementieren. Bluetooth-Sprachwahl 2.2.1 September 2010 Bugfixes 2.2.2 Januar 2011 Fix für SMS-Bug 2.3 Gingerbread 6. Dezember 2010 Linux-Kernel 2.6.35.7 Unterstützung von WebMUnterstützung von HTML5 Audio 19

Unterstützung von Google TV Unterstützung von Near Field Communication Parallele Garbage Collection für ruckelfreiere Animationen verbesserte Integration von sozialen Netzwerken Unterstützung von Gyroskopen (nicht zu verwechseln mit Bewegungssensoren) und anderen Sensoren (u. a. Barometer, Schwerkraftsensor) integrierter SIP-Client für VoIP integrierter Downloadmanager Unterstützung des Ext4-Dateisystems 2.3.1 Dezember 2010 Bugfixes Update auf Google Maps 5.0 2.3.2 Januar 2011 Fix für SMS-Bug 2.3.3 23. Februar 2011 verbesserte Dual-Core-Unterstützung Unterstützung von Dual-Core-Apps auf Single- Core-Geräten verbesserte Unterstützung der NFC-Technik verbesserte Bluetooth-Unterstützung kleinere Verbesserungen 2.3.4 29. April 2011 Video- und Voice-Chat mit Google Talk verschlüsselte Übertragung von Terminen und Kontakten Bugfixes 2.3.5 8. Juli 2011 4G Fixes Tweaks und volle Unterstützung für den NFC- Transceiver Bugfixes 2.3.6 2. September 2011 Voice-Search-Fix Bugfixes 2.3.7 20. September 2011 Bugfixes 20

3.0 Honeycomb 23. Februar 2011 benutzerfreundlichere Oberfläche verbesserte Unterstützung für Tablet- Computer Google Talk mit Videotelefonie neue Browser-Funktionen: Synchronisierung der Lesezeichen mit Google Chrome, Tabs. automatisches Ausfüllen von Formularen und Inkognito-Modus beim Surfen 3.1 10. Mai 2011 USB-Host-Modus Verbesserungen an Benutzeroberfläche und Widgets Verbesserungen und Erweiterungen am Browser eigene Proxyeinstellungen für jedes WLAN 3.2 16. Juli 2011 verbesserte Anpassung an Tablet-Computer mit einer Bildschirmdiagonale von 7 Zoll neuer Kompatibilitätsmodus zur besseren Darstellung von Apps, die für kleinere Bildschirmauflösungen programmiert wurden Media sync from SD card : Ermöglicht Apps den direkten Zugriff auf Multimedia-Dateien der eingelegten SD-Karte z. B. zur Synchronisation erweiterte CPU-Hardware-Unterstützung Funktionen für Entwickler, um ihre Apps besser an verschiedene Bildschirmauflösungen anpassen zu können 3.2.1 20. September 2011 Bugfixes 4.0 Ice Cream Sandwich 19. Oktober 2011 Zusammenführung der Entwicklungslinien 2.x und 3.x und Google TV. Linux-Kernel 3.0.1 verbessertes Multitasking NFC für Kontakte, Daten und Links mit Android Beam Entsperren per Gesichtserkennung 21

verbesserter Browser, verbesserte Google- Mail-, Galerie- und Kalender-App Data Tracking App native Funktion zum Erstellen von Screenshots viele Detailverbesserungen 4.0.1 17. November 2011 erste Version (Build ITL41D) für das Galaxy Nexus Behebung des Volume-Bugs in Build ITL41F 4.0.2 15. Dezember 2011 Mobile Hotspot bei Benutzung von VPN optimiert Kernel version 3.0.8 3G/4G-Verbindungen für schnellere Reaktionszeiten optimiert falsche Benachrichtigung, dass Datenverbindung wegen Roaming unterbrochen wurde behoben Verbesserung bestimmter optischer Effekte bei Benutzung des Camcorders mit der Frontkamera optische Verbesserungen des Lockscreens Problem mit nicht korrekt angezeigten/öffnenden E-Mail-Anhängen behoben DivX-Unterstützung wurde entfernt Verbesserte Lautstärke bei der turn-by-turn- Navigation von Google 4.0.3 16. Dezember 2011 neue APIs erste offizielle Version für das Nexus S Source für Dritthersteller (Samsung, Motorola, usw.) 4.0.4 4. Februar 2012 verbesserte Performance diverse Bugfixes automatische Helligkeitssteuerung wurde verbessert 22

allgemeine Lautstärke wurde erhöht Multitouch-Bug behoben Version bisher nur für das Galaxy Nexus (Verizon LTE) Tabelle 2: alle Android Versionen im Überblick [9] Abbildung 5: Das Prozent des Versionsanteils in 2012 [14] 2.2.1.2. Android - Architektur Android basiert auf dem Linux 2.6 Kernel [15], ist in der Programmiersprache Java programmiert und wird unter der Apache v2 open source license zu vertreiben sein [10]. Es sind die wichtigsten bereits bekanntgegebenen Merkmale der neuen Open Source Plattform Android. Der Linux Kernel regelt die Prozessverwaltung und Datenverwaltung. Im Kernel sind die meisten wichtigen Treiber abgelegt und zur Verfügung gestellt, welche die einzelnen Hardware Komponenten benötigen, z.b.: die Treiber von der Kamera, die WLAN - Treiber, die Tastatur Treiber Laut [7] greifen die Anwendungsschicht 3 und der Anwendungsrahmen 4 von Android auf eine Menge von Basisbibliotheken zu, die in den folgenden Abschnitten detailliert beschrieben werden. Diese Bibliotheken stellen alle zum Betrieb von Android- Anwendungen erforderlichen Funktionalitäten (Datenbank, 3D-Grafikbibliotheken, Webzugriff, Multimedia-Verwaltung, Oberflächengestaltung...) bereit. 3 : Application 4 : Application Framework 23

Die Standardbibliotheken 5 sind fester Bestandteil des Systems und können von Anwendungsentwicklern nicht geändert werden. Der Anwendungsrahmen ist die für Android-Entwickler interessanteste Schicht des Systems. Android stellt verschiedene Programmierschnittstellen bereit, die eine Kommunikation zwischen einzelnen Anwendungen sowie zwischen Endanwender und Anwendung realisieren. Auf der obersten Ebene des Systems befinden sich die Android-Anwendungen. Innerhalb der Anwendungsschicht findet die Kommunikation zwischen Mensch und Maschine sowie Interaktionen zwischen Anwendungen statt. Jede Anwendung bedient sich dabei der darunterliegenden Programmierschnittstelle. Kern der Laufzeitumgebung 6 bildet die Dalvik Virtual Machine (DVM). Wird eine Android-Anwendung gestartet, so läuft sie in einem eigenen Betriebssystemprozess. Android spendiert jeder Anwendung darüber hinaus noch eine eigene DVM. Dieses Diagramm beschreibt nochmals die wichtigsten Softwarekomponenten von Android: Abbildung 6: Android Software Stack [developer.android.com] 5 : Libraries 6 : Android Runtime 24

2.2.2. Programmierung für Android 2.2.2.1. Android Toolkit Android Developer Tools (ADT) ist ein Plugin für Eclipse und bietet eine Menge von Programmierungswerkzeuge, die mit der Eclipse IDE 7 integriert sind. Es ermöglicht viele Zugriffe, um die Android Applikationen schnell und einfach zu entwickeln. ADT bietet GUI 8 -Zugriff auf viele SDK 9 Tools - Kommandozeilen sowie ein UI 10 -Design- Werkzeug für den Prototyp, die Konzeption und den Aufbau von der Benutzeroberfläche der Anwendung. Mit SDK wird dem Entwickler alles angeboten, was er benötigt, um eine lauffähige Android Anwendung entwickeln zu können. Das Android SDK enthält einen Emulator für mobile Geräte - ein virtuelle mobile Gerät, der auf Ihrem Computer ausgeführt wird. Mit dem Emulator können Android - Anwendungen ohne ein physisches Gerät entwickelt und getestet werden. Abbildung 7: ein Android Emulator 7 : integrierte Entwicklungsumgebung 8 : grafische Benutzeroberfläche 9 : Software Development Kit 10 : Benutzerschnittstelle 25

Die wichtigen Eigenschaften von Android SDK sind: [16] XML-basiertes GUI-Layout (Trennung von Logik und Layout) Unterstützung zur automatischen Anpassung an verschiedene Konfigurationen (Sprache, Display, usw...) Integration von Ressourcen (Grafiken, Audiodateien, XML-Dateien, usw...) Internet-Kommunikation: TCP/IP, UDP und darauf basierende Protokolle Ad-Hoc Netzwerk: Bluetooth (RFCOMM bzw. SPP seit 2.0) Location API 11 Kartendarstellungen (Google Maps) Zugriff auf Sensoren und Aktoren DBMS 12 (SQLite) Wiedergabe verschiedener Medien-Formate Aufnahme von Fotos und Videos Komponententechnologie 2.2.2.2. Die Dalvik Virtual Machine Die Dalvik Virtual Machine 13 stellt das Herzstück der Android-Laufzeitumgebung dar und basiert auf der quelloffenen JVM Apache Harmony 14, wurde aber in Aufbau und Funktionsumfang an die Anforderungen mobiler Endgeräte angepasst. [7] Die Dalvik VM ist eine für mobile Geräte entwickelte Java Virtual Machine (JVM). Die Dalvik Virtual Machine besitzt einen eigenen Bytecode, was sie von vielen anderen JVMs unterscheidet. Dalvik kann mit dem Programm dx herkömmliche CLASS-Dateien von Java in DEX-Dateien konvertieren (Dalvik Executable). Dabei werden mehrere CLASS-Dateien zu einer DEX-Datei zusammengefasst und einige Optimierungen bezüglich des Speicherbedarfs vorgenommen. Das Dalvik Cache Verzeichnis beinhaltet alle vorkompilierten DEX-Dateien, die von den APK- und JAR-Dateien auf dem Android Phone erstellt wurden. Diese Dateien werden immer dann generiert, wenn die Dalvik 11 : Schnittstelle zur Anwendungsprogrammierung 12 : Datenbankmanagementsystem 13 : wurde von einem Google-Mitarbeiter namens Dan Bornstein entwickelt 14 : ein Projekt der Apache Software Foundation 26

Virtual Machine entdeckt, dass die existierende DEX-Datei mit einer älteren Version erstellt wurde. Daher dauert häufig der erste Start, nachdem man ein neues ROM geflasht hat, etwas länger, weil er dann zuerst alle neuen DEX-Dateien erstellen muss. [15] Abbildung 8: der Weg von der Erstellung bis zur Ausführung im Android Gerät [7] 2.2.2.3. Bestandteile einer Android Anwendung Anwendungen, die mit dem Anwender interagieren, brauchen mindestens eine Activity, um eine Oberfläche darzustellen. Activities sind sichtbar und können miteinander zu einer komplexeren Anwendung verknüpft werden. Sie kümmern sich um die Darstellung von Daten und nehmen Anwendereingaben entgegen. Sie sind jedoch Komponenten einer Anwendung, die mehr machen als die reine Darstellung von Daten und Formularen. [7] Abbildung 9: Activity Stack [Christian Baumann, Seminar Android ] 27

Abbildung 10: Activity Ablaufdiagramm [http://developer.android.com/guide/topics/fundamentals.html] Wenn man einen Dienst starten möchte, der eigenständig im Hintergrund läuft und beliebigen Anwendungen zur Verfügung steht, dann verwendet man einen Prozess. In Android realisiert man einen solchen Prozess durch eine spezielle Art von Service. [7] Dieser Service hat eine klar definierte Aufgabe und ist ein eigenständiger Programmteil, welcher für andere Anwendungen wiederverwendet werden kann. Zur Unterscheidung verwendet man die beiden Begriffe Local Service und Remote Service. Local Service ist ein Service, der im gleichen Prozess wie die Anwendung läuft, die den Service startet. Remote Service ist ein Android-Service, der in einem eigenen Prozess läuft. 28

Abbildung 11: die Kommunikation über Inter-Process Communication (IPC) [7] Viele Anwendungen bieten die Möglichkeit, Daten zu laden oder zu speichern. Ein Content Provider verwaltet Daten und abstrahiert die darunterliegende Persistenzschicht. Er kann über Berechtigungen seine Daten einer bestimmten Anwendung oder auch vielen Anwendungen zur Verfügung stellen. Er hat eine definierte Schnittstelle und wird darüber lose an Anwendungen gekoppelt. Abbildung 12: Conten Provider und Content Resolver [7] Durch die komponentenbasierte Anwendungsentwicklung unter Android ist es notwendig, zwischen Betriebssystem und Anwendungen zu kommunizieren. Auch die Kommunikation zwischen Anwendungen ist möglich. Intents werden als Verbindung zum Objekte zur Nachrichtenübermittlung bezeichnet. Broadcast Receiver lauschen jedoch als Komponente auf Broadcast Intents, die auf Systemebene verschickt werden und z.b. über Störungen der Netzwerkverbindung informieren oder über einen schwachen Akku. 2.3. Verwandte Arbeit Stand der Technik Es gibt relative viele Android - Programme, die alle WLANs von dem aktuellen Standort herausfindet und deren Signalstärke analysiert. Diese Programme wurden in Android Market veröffentlicht und beschrieben. Wifi Analyzer ist ein kostenloses 29

Beispiel. Dies wurde über 50.000 Mal heruntergeladen und bewertet. Es berichtet den Name, Adresse, Signalstärke in dbm und Kanal aller Access Points innerhalb der Reichweite. Auch die Grafikdarstellung ist möglich. Abbildung 13: Wifi Analyzer Screenshots [https://market.android.com/] 30

KAPITEL 3: KONZEPT THEORIE DER ARBEIT In diesem Kapitel wird vorab versucht, den Überblick der Arbeit zu beleuchten. Es beschreibt die Grundidee, wie die WLAN Netze gescannt und bewertet werden, sowie die Abmessungsorten zu navigieren sind. Mit Hilfe von Android Toolkit werden die Informationen von allen verfügbaren Netzen (SSID 15, Signalstärke ) bereitgestellt. Zum Beispiel android.net.wifi.wifimanager - diese Klasse stellt die primäre API 16 für die Verwaltung aller Aspekte der WLAN Konnektivität zur Verfügung. Die Instanz dieser Klasse wird durch den Aufruf Context.getSystemService (Context.WIFI_SERVICE) geholt. Die Wi-Fi-APIs stellen ein Mittel, mit denen Anwendungen mit der unteren Ebene Wireless-Stack, die Wi-Fi- Netzwerk Zugriff kommunizieren können. Fast alle Informationen aus dem Gerät Bittsteller ist, darunter auch das angeschlossene Netzwerk die Verbindungsgeschwindigkeit, IP-Adresse, Verhandlungs-Zustand, und mehr, sowie Informationen zu anderen Netzwerken, die verfügbar sind. Einige andere API- Funktionen beinhalten die Möglichkeit zu scannen, zu ergänzen, zu speichern, beenden und starten Wi-Fi-Verbindungen. Tabelle 3: android.net.wifi Paket [http://developer.android.com/reference/android/net/wifi/package-summary.html] 15 : Service Set Identifier 16 : Application Programming Interface 31

GPS 17 ist kaum verfügbar in Gebäuden. Es ist nur geeignet auf den Straßen, Wegen, Garten, Wiesen und die Exaktheit von GPS Navigation ist relativ niedrig für diese Arbeit. Deshalb wird ein Lageplan vorausgesetzt, um jede Messungsstelle vom Nutzer zu bestimmen. Das Programm soll die Pläne grafisch laden und anzeigen können. Die auf dem Handydisplay dargestellten Bilder müssen zur genaueren und einfachen Nutzung vergrößert bzw. verkleinert sowie hin- und hergeschoben werden können, damit der Nutzer anhand der Lageplänen seine aktuelle Position orten kann. Abbildung 14: Konzept des Programms Nachdem das Programm beendet, werden alle herausgefundenen Informationen der verfügbaren Netze (nummerierte Stelle, SSID, Signalstärke von jeweiligem Netz) in eine Text Datei gespeichert und die entsprechenden Stellen in eine Image Datei als Überblick beschrieben. Für jedes Netz erzeugt das Programm zur Auswertung eine grafische Darstellung (Image) mit allen gescannten Stellen und deren Signalstärken. 17 : Global Positioning System 32

KAPITEL 4: IMPLEMENTIERUNG Diese Arbeit wird in Java programmiert, deren Hauptteil unter Verwendung des Android Tookits (ADT) die Darstellungs- und Abmessungsaufgabe haben soll. Das Android Toolkit wird als Grundlage dieser Implementierung genutzt, da es bereits einen Großteil der benötigten Infrastruktur zur Umsetzung des Konzeptes bereitstellt. Zum Speichern der Ergebnisse als Dateien benötigt es das java.io Paket. 4.1. Überblick des Programms Dieses Programm hat zwei Hauptdisplays. Eines ist zum Bilderladen ( MainActivity mainactivity.java) und das andere zum Darstellen des Bildes mit Schieben- und Zoommodus ( MapView mapview.java). Die entsprechenden Layouts der Displays befinden sich im Ordner res/layout befindlichen XML Dateien (main.xml und map.xml). Der Ordner res/drawable enthält die Bilder und Dateien zur Darstellung des Zustandes von den Buttons normal und gedrückt. Der Signalmessungsvorgang nutzt 2 Pakete, um die APIs für das Scannen und Messen aufzurufen: import android.net.wifi.scanresult; import android.net.wifi.wifimanager; Listing 1: Zwei wichtige Android Pakete zum Scannen Die Netzinformationen und Signalkoordinate werden in WifiResult Klasse gespeichert: public class WifiResult { ScanResult result = null; Point point; int count; public WifiResult() { public void setresult(scanresult result) { this.result = result; public ScanResult getscanresult() { return result; public String getssid() { if (result!= null) return result.ssid; else return null; public int getlevel() { if (result!= null) return result.level; else return 0; public void setpoint(point point) { this.point = point; public Point getpoint() { 33

return point; public void setcount(int count) { this.count = count; public int getcount() { return count; Listing 2: WifiResult class zum Speichern der Informationen von den WLAN - Netzen 4.2. Darstellung das Programmlayout Die Elemente von den Eingabemasken werden in die XML Datei definiert. Beim Erstellen eines Android Projekts wird automatisch ein LinearLayout mit vertikaler Ausrichtung gewählt. Pro Bildschirmseite muss eine XML - Datei im Verzeichnis res/layout erstellt werden. Von dort wird sie, identifiziert durch ihren Dateinamen, beim Start ihres Activity eingelesen und angezeigt. 4.2.1. Layout von Programmoberfläche <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingtop="150dip" android:paddingbottom="30dip" android:text="@string/text" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/button" android:id="@+id/button"/> </LinearLayout> Listing 3: Programm Layout 4.2.2. Layout zur Grafikdateidarstellung Nachdem Laden des Bildes wird dies (imageview) mit 4 Richtungsbuttons (left_arrow, right_arrow, top_arrow, bottom_arrow) und 2 Zoombuttons (zoom_in, zoom_out) auf dem Display angezeigt. <ImageView android:id="@+id/imageview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:contentdescription="@string/app_name" /> <RelativeLayout android:layout_width="fill_parent" 34

android:layout_height="fill_parent" > <ImageView android:id="@+id/left_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centervertical="true" android:contentdescription="@string/app_name" android:src="@drawable/left_arrow_btn" /> <ImageView android:id="@+id/right_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentright="true" android:layout_centervertical="true" android:contentdescription="@string/app_name" android:src="@drawable/right_arrow_btn" /> <ImageView android:id="@+id/top_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparenttop="true" android:layout_centerhorizontal="true" android:contentdescription="@string/app_name" android:src="@drawable/top_arrow_btn" /> <ImageView android:id="@+id/bottom_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_centerhorizontal="true" android:contentdescription="@string/app_name" android:src="@drawable/bottom_arrow_btn" /> <LinearLayout android:id="@+id/zoom" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentbottom="true" android:layout_alignparentright="true" android:orientation="vertical" android:padding="10dip" > <ImageView android:id="@+id/zoom_in" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentdescription="@string/app_name" android:src="@drawable/zoom_in_btn" /> <ImageView android:id="@+id/zoom_out" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentdescription="@string/app_name" android:src="@drawable/zoom_out_btn" /> </LinearLayout> </RelativeLayout> </FrameLayout> Listing 4: Button Layout definieren 35

Abbildung 15: Programmansicht nach dem Laden des Plans 4.3. Funktionen 4.3.1. Activity Initialisierung Activities werden von android.app.activity abgeleitet. Neben dieser Standard - Implementierung stellt die Android-API Activities für unterschiedliche Aufgaben bereit. Zuerst erzeugt die Methode oncreate ein Activity und ruft die Datei main.xml für sein Layout auf. @Override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); buttonchoose = (Button) findviewbyid(r.id.button); buttonchoose.setonclicklistener(new View.OnClickListener() { @Override public void onclick(view arg0) { Intent intentselect = new Intent(Intent.ACTION_GET_CONTENT); intentselect.settype("image/*"); startactivityforresult( Intent.createChooser(intentSelect, "Select image"), REQUEST_PHOTO_SELECT); ); Listing 5: Display zum Laden eines Bildes Der Button wird auf dem Display mit einem Ereignis dargestellt, bei dem durch Betätigung des Buttons die Bilder aus der Galerie zur Auswahl stehen. Nachdem ein 36

Bild gewählt wurde, wird ein Intent 18 initialisiert, um dieses Bild durch den Aufruf des MapView zu veranschaulichen und den Bilderpfad zu speichern. @Override protected void onactivityresult(int requestcode, int resultcode, Intent data) { if ((resultcode == RESULT_OK) && (requestcode == REQUEST_PHOTO_SELECT)) { String path = data.getdata().tostring(); Intent intent = new Intent(); intent.setclass(getapplicationcontext(), com.demo.wifiscanner.mapview.class); intent.putextra("path", path); startactivity(intent); Listing 6: Intent initialisieren 4.3.2. MapView MapView enthält die Hauptfunktionen des Programms wie Bilderdarstellung, Zoom (In/Out), Bilderverschiebung und Signalstärkemessung. 4.3.2.1. MapView initialisieren Am Anfang entfernt das Programm den Android Titel, setzt den Bildschirm in Fullscreen Modus und holt das zugehörige Layout. requestwindowfeature(window.feature_no_title); getwindow().setflags(windowmanager.layoutparams.flag_fullscreen, WindowManager.LayoutParams.FLAG_FULLSCREEN); setcontentview(r.layout.map); Listing 7: Bild mit Layout Um das Bild richtig passend mit dem Bildschirm anzuzeigen, muss das Programm über die Auflösung von dem Standard Display erfahren, durch den Aufruf der Methode getdefaultdisplay() von android.view.windowmanager. Bei jedem Drücken des Bewegungsbuttons wird das Bild um ein Viertel der Bildschirmlänge gezogen. Alle Buttons werden aus der XML Datei durch die eindeutige Identifizierung gefunden und deren Aktion dann aktiviert. Display display = getwindowmanager().getdefaultdisplay(); screen.x = display.getwidth(); screen.y = display.getheight(); movex = (int) screen.x / 4; movey = (int) screen.y / 4; imageview = (ImageView) findviewbyid(r.id.imageview); Bundle extras = getintent().getextras(); if (extras == null) finish(); String path = extras.getstring("path"); mapbitmap = getbitmap(path); imageview.setimagebitmap(mapbitmap); 18 : Ein Intent repräsentiert einen konkreten Aufruf eines anderen Activity, eines Hintergrundprozesses oder einer externen Anwendung. [7] 37

imagedis.x = mapbitmap.getwidth(); imagedis.y = mapbitmap.getheight(); leftarrow = (ImageView) findviewbyid(r.id.left_arrow); rightarrow = (ImageView) findviewbyid(r.id.right_arrow); toparrow = (ImageView) findviewbyid(r.id.top_arrow); bottomarrow = (ImageView) findviewbyid(r.id.bottom_arrow); ImageView zoomin = (ImageView) findviewbyid(r.id.zoom_in); ImageView zoomout = (ImageView) findviewbyid(r.id.zoom_out); imgarrow = BitmapFactory.decodeResource(getResources(),R.drawable.top_arrow); zoomlayout = (LinearLayout) findviewbyid(r.id.zoom); leftarrow.setonclicklistener(this); rightarrow.setonclicklistener(this); toparrow.setonclicklistener(this); bottomarrow.setonclicklistener(this); zoomin.setonclicklistener(this); zoomout.setonclicklistener(this); Listing 8: Bildschirmeinstellung 4.3.2.2. Bild aus der Galerie holen Diese Methode liefert den Typ Bitmap, wenn das zu ladende Bild ausgewählt wurde. Der Bilderpfad wird als URI formatiert. Dann wird das Bild dekodiert, um den Speicher zu optimieren. In diesem Fall ist ein Halbe von dem Original. private Bitmap getbitmap(string path) { Uri uri = Uri.parse(path); ContentResolver cr = this.getbasecontext().getcontentresolver(); InputStream is = null; try { is = cr.openinputstream(uri); BitmapFactory.Options opt = new BitmapFactory.Options(); opt.insamplesize = 2; bmp = BitmapFactory.decodeStream(is, null, opt); is = null; return bmp; catch (FileNotFoundException e) { e.printstacktrace(); return null; Listing 9: Bild holen und dekodieren 4.3.2.3. Darstellung der Touchposition auf dem Bild Die Methode drawoverlay hat die Aufgabe, die Scananzahl und deren Koordinate auf dem Bild mapbitmap zu schreiben. private Bitmap drawoverlay(bitmap mapbitmap, Bitmap overbitmap, int pointx, int pointy) { Bitmap bitmap = Bitmap.createBitmap(mapBitmap.getWidth(), mapbitmap.getheight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawbitmap(mapbitmap, 0, 0, null); canvas.drawbitmap(overbitmap, pointx - 30, pointy - 20, null); Paint paint = new Paint(); paint.setcolor(color.red); paint.settextsize(25); paint.setantialias(true); canvas.drawtext(string.valueof(count), pointx - 45, pointy + 20, paint); BitmapDrawable drawable = new BitmapDrawable(bitmap); 38

return drawable.getbitmap(); Listing 10: Touchkoordinate auf dem Bild schreiben 4.3.2.4. Signalstärkemessung Zuerst holt das Programm die Informationen (WLAN SSID, Koordinate, Scananzahl). private void checksignalstrength(int pointx, int pointy) { count++; List<ScanResult> results; wifimanager = (WifiManager) getsystemservice(wifi_service); results = wifimanager.getscanresults(); if (results!= null) { for (ScanResult result : results) { String ssid = result.ssid; if (!ssidarray.contains(ssid)) { ssidarray.add(ssid); WifiResult wifiresult = new WifiResult(); wifiresult.setresult(result); wifiresult.setpoint(new Point(pointX, pointy)); wifiresult.setcount(count); resultsarray.add(wifiresult); resultstr += "Point: " + count + ", SSID: " + result.ssid + ", Signal strength: " + result.level + "dbm\r\n"; else { resultstr += "Point: " + count + " No signal"; Listing 11: Scaninformationen speichern Dann zeigt das Programm einen Kreis auf dem Bildschirm, wo Touchposition ist. Eine Meldung erscheint auch, dass der Scanprozess erfolgreich ist, und gibt die Möglichkeit, das Programm zu beenden bzw. mit dem Scan fortzusetzen oder den Kommentar hinzuzufügen. Bitmap strengcheck = BitmapFactory.decodeResource(getResources(),R.drawable.streng_check); mapbitmap = drawoverlay(mapbitmap, strengcheck, pointx, pointy); imageview.setimagebitmap(mapbitmap); AlertDialog.Builder builder = new Builder(this); builder.setmessage(arlet_message_done); final EditText edittext = new EditText(this); builder.setview(edittext); builder.setpositivebutton("yes", new DialogInterface.OnClickListener() { @Override public void onclick(dialoginterface arg0, int arg1) { String input = edittext.gettext().tostring().trim(); if (input.length()!= 0) input = "Comment: " + input + "\n"; resultstr += input; flag = true; ); builder.setnegativebutton("no", new DialogInterface.OnClickListener() { @Override public void onclick(dialoginterface dialog, int which) { processexit(); return; 39

); AlertDialog dialog = builder.create(); dialog.show(); Listing 12: Scanposition anzeigen Abbildung 16: Scanposition und Prozessmeldung 4.3.2.5. Zuordnung der Signalstufe Um die Signalstärke (in dbm) grafisch einzustufen, habe ich andere Programme von Android Markt angeschaut, die WLAN Signalstärke messen und bewerten, wie viel dbm einem starken Signal oder niedrigen entsprechen. Zum Beispiel: Wi-Fi Analytics, WiEye, Wifi Analyzer 40

Abbildung 17: Beispiele für die Zuordnung der Signalstärke [Androit - Market] private Bitmap getbimaplevel(int level) { Bitmap streng1 = BitmapFactory.decodeResource(getResources(),R.drawable.streng1); Bitmap streng2 = BitmapFactory.decodeResource(getResources(),R.drawable.streng2); Bitmap streng3 = BitmapFactory.decodeResource(getResources(),R.drawable.streng3); Bitmap streng4 = BitmapFactory.decodeResource(getResources(),R.drawable.streng4); Bitmap streng5 = BitmapFactory.decodeResource(getResources(),R.drawable.streng5); Bitmap strengx = BitmapFactory.decodeResource(getResources(),R.drawable.strengx); if (level >= -60) { return streng1; else if (level >= -75) { return streng2; else if (level >= -85) { return streng3; else if (level >= -90) { return streng4; else { return streng5; Listing 13: Zuordnung der Signalstärke 4.3.2.6. Imagedatei erzeugen Um alle WLAN Netze auszuwerten, erzeugt das Programm für jedes Netz auf dem Speicher eine Imagedatei mit zugehörigen Scanstellen und grafisch dargestellte Signalstärke entsprechend. private void saveimage() { int n = ssidarray.size(); for (int i = 0; i < n; i++) { String SSID = ssidarray.get(i); Bitmap bitmap = Bitmap.createBitmap(bmp.getWidth(),bmp.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(bitmap); canvas.drawbitmap(bmp, 0, 0, null); Paint paint = new Paint(); paint.setcolor(color.red); paint.settextsize(25); 41

paint.setantialias(true); for (WifiResult result : resultsarray) { if (result.getssid().equals(ssid)) { Point point = result.getpoint(); canvas.drawbitmap(getbimaplevel(result.getlevel()), point.x - 30, point.y - 20, null); canvas.drawtext(string.valueof(result.getcount()), point.x - 45, point.y + 12, paint); BitmapDrawable drawable = new BitmapDrawable(bitmap); writebitmaptosdcard(drawable.getbitmap(), SSID); writebitmaptosdcard(mapbitmap, "map"); Listing 14: Imagedateien speichern 4.3.2.7. Erstellung des Bildordners Damit der Nutzer die Dateien einfach findet und verwaltet, wird der Ordner mit dem Format von Datum und Uhrzeit erstellt. private String getpath() { SimpleDateFormat formattitle = new SimpleDateFormat("ddMMHHmm"); long time = System.currentTimeMillis(); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { String foderpath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + FODER_NAME + "/" + formattitle.format(time); return foderpath; else return null; Listing 15: Ordnererstellung 4.3.2.8. Imagedatei speichern Das Image wird mit höchster Qualität komprimiert, indem der Qualitätsparameter auf 100 gesetzt wurde, und dann als JPEG an den Ausgabestrompuffer übergeben. try { out = new FileOutputStream(file.toString() + "/" + filename + ".jpg"); BufferedOutputStream bos = new BufferedOutputStream(out); bitmap.compress(bitmap.compressformat.jpeg, 100, bos); bos.close(); bos = null; out.flush(); out.close(); catch (Exception e) { isdone = false; Listing 16: Imagedatei speichern 42

4.3.2.9. Touch Ereignis erkennen Die Methode public boolean ontouchevent(motionevent event) prüft ob der Nutzer auf dem Display drückt. Die Zeigervariable coordinate wird genutzt, um die relative Koordinate zwischen dem Display und dem anzuzeigenden Bild zu bestimmen. Am Anfang sind coordinate.x und coordinate.y gleich Null wie die untere Abbildung, da die Abweichung 0 Pixel ist. Handydisplay Das Bild Abbildung 18: Relation zwischen Display und Bild Jede Bildverschiebung wird die Variable coordinate entsprechend geändert, um bei jeder Messung die Koordinate vom Bild aus der Koordinate von dem Bildschirm zu berechnen. Wenn man auf dem schwarzen Feld toucht, wo auf dem Display und außerhalb des Bilds ist, wird die Signalstärke nicht gemessen. Die Variable ratio ist ein Verhältnis zwischen dem Display und dem Bild, um die Koordinate nach dem Zoomen nochmals zu bestimmen. if (event.getaction() == MotionEvent.ACTION_DOWN &&!isbuttonarea((int) event.getx(), (int) event.gety()) && flag) { if (zoomin) { int touchx = coordinate.x + (int) event.getx(); int touchy = coordinate.y + (int) event.gety(); if (touchx > 10 && touchx < imagedis.x - 10 && touchy > 10 && touchy < imagedis.y - 10) { checksignalstrenght(touchx, touchy); flag = false; else { ratio = (float) imagedis.x / screen.x; int checkstart = (int) (screen.y - imagedis.y / ratio) / 2 + 10; int checkend = screen.y - checkstart; final int touchx = (int) (event.getx() * ratio); final int touchy = (int) ((event.gety() - checkstart) * ratio); if (event.gety() > checkstart && event.gety() < checkend) { checksignalstrenght(touchx, touchy); flag = false; 43

else { ratio = (float) imagedis.x / screen.x; int checkstart = (int) (screen.y - imagedis.y / ratio) / 2 + 10; int checkend = screen.y - checkstart; final int touchx = (int) (event.getx() * ratio); final int touchy = (int) ((event.gety() - checkstart) * ratio); if (event.gety() > checkstart && event.gety() < checkend) { checksignalstrenght(touchx, touchy); flag = false; Listing 17: Koordinate berechnen 4.3.2.10. Buttonfelder prüfen Um die Buttons funktionierend zu gewährleisten, werden alle Buttonfelder für den Scanprozess gesperrt und nur für die Zoom- und Bewegungs-funktion des Bildes aktiviert. Deswegen hat die Methode isbuttonarea diese Felder zu berechnen und prüft ob der Nutzer auf diesen gedrückt hat. private boolean isbuttonarea(int x, int y) { int spacing = 20; Point arrow = new Point(); Point zoom = new Point(); arrow.x = imgarrow.getwidth() + spacing; arrow.y = imgarrow.getheight() + spacing; zoom.x = zoomlayout.getwidth(); zoom.y = zoomlayout.getheight(); boolean istoparea = (((int) (screen.x - arrow.x) / 2) < x && x < (((int) (screen.x - arrow.x) / 2) + arrow.x))&& y < arrow.y; boolean isleftarea = (((int) (screen.y - arrow.x) / 2) < y && y < (((int) (screen.y - arrow.x) / 2) + arrow.x))&& x < arrow.y; boolean isbottomarea = (((int) (screen.x - arrow.x) / 2) < x && x < (((int) (screen.x - arrow.x) / 2) + arrow.x))&& y > (screen.y - arrow.y); boolean isrightarea = (((int) (screen.y - arrow.x) / 2) < y && y < (((int) (screen.y - arrow.x) / 2) + arrow.x))&& x > (screen.x - arrow.y); boolean iszoomarea = x > (screen.x - zoom.x) && y > (screen.y - zoom.y); return (istoparea isleftarea isbottomarea isrightarea iszoomarea); Listing 18: Buttonfelder prüfen 4.3.2.11. Bildervergrößerung Bei der Bildervergrößerung wird die relative Koordinate zwischen dem Display und dem anzuzeigenden Bild coordinate auf null gesetzt. Das heißt, das zu vergrößernde Bild wird wieder wie die Abbildung 16 angezeigt werden sollte. Dies erscheint auf dem Bildschirm mit seiner originalen Auflösung, indem das Programm die Methode imageview.setscaletype(scaletype.matrix); aufruft. private void zoomimage(boolean iszoomin, ImageView imageview, Bitmap bitmap) { if (iszoomin) { coordinate.set(0, 0); imageview.setscaletype(scaletype.matrix); imageview.setimagematrix(matrix); else { matrix.reset(); 44

coordinate.set(0, 0); imageview.setscaletype(scaletype.fit_center); imageview.setimagebitmap(bitmap); Listing 19: Bildervergrößerung 4.3.2.12. Bilderverschiebung Je nachdem wohin das Bild durch Variable mode verschoben werden soll, wird die Koordinate berechnet und zieht das Programm das Bild entsprechend mithilfe der Methode matrix.posttranslate(). Danach gibt das Programm das verschobene Bild aus. private void moveimage(int mode) { savedmatrix.set(matrix); imageview.setscaletype(scaletype.matrix); matrix.set(savedmatrix); switch (mode) { case TOP: matrix.posttranslate(0, -movey); coordinate.y += movey; break; case LEFT: matrix.posttranslate(-movex, 0); coordinate.x += movex; break; case RIGHT: matrix.posttranslate(movex, 0); coordinate.x -= movex; break; case BOTTOM: matrix.posttranslate(0, movey); coordinate.y -= movey; break; default: break; imageview.setimagematrix(matrix); Listing 20: Bilderverschiebung 4.3.2.13. Buttonbetätigungserkennung Die Buttons werden sichtbar für jedes Drücken bzw. Zoomen auf dem Display bei der Zuweisung setvisibility(view.visible). Wenn die Bewegung oder Vergrößerung sowie Verkleinerung des Bildes nicht mehr möglich ist, werden diese ausgeblendet. Nur einblenden falls es wieder möglich ist. @Override public void onclick(view v) { rightarrow.setvisibility(view.visible); leftarrow.setvisibility(view.visible); toparrow.setvisibility(view.visible); bottomarrow.setvisibility(view.visible); switch (v.getid()) { case R.id.zoom_in: if (imagedis.x > 1.2 * screen.x imagedis.y > screen.y) { zoomin = true; 45

zoomimage(zoomin, imageview, mapbitmap); else { Toast.makeText(getApplicationContext(), "No zoom level for this size", Toast.LENGTH_LONG).show(); break; case R.id.zoom_out: zoomin = false; zoomimage(zoomin, imageview, mapbitmap); break; case R.id.bottom_arrow: if (zoomin && coordinate.y > 0) { moveimage(bottom); else bottomarrow.setvisibility(view.gone); break; case R.id.right_arrow: if (zoomin && coordinate.x > 0) { moveimage(right); else rightarrow.setvisibility(view.gone); break; case R.id.left_arrow: if (zoomin && coordinate.x < imagedis.x - screen.x) { moveimage(left); else leftarrow.setvisibility(view.gone); break; case R.id.top_arrow: if (zoomin && coordinate.y < imagedis.y - screen.y) { moveimage(top); else toparrow.setvisibility(view.gone); break; default: break; Listing 21: Sichtbarkeit der Buttons und Zuweisung deren Funktion 4.3.2.14. Beendung Die Methode processexit() wird gerufen, wenn der Nutzer nicht mehr mit dem Scannen fortfahren möchte, indem der No Button betätigt wird oder wenn Back - Taste von Android in Aktion tritt. Alle Dateien (Image und Text) werden dann gespeichert, Dialog wird gelöscht und die Applikation beendet. 46

Abbildung 19: Weiterscannen - Anfrage private void processexit() { progressdialog = ProgressDialog.show(MapView.this, "", "Saving image and text file in SDCard..."); new Thread(new Runnable() { @Override public void run() { saveimage(); writetotextfile(resultstr); updateui.sendemptymessage(0); private Handler updateui = new Handler() { @Override public void dispatchmessage(message msg) { super.dispatchmessage(msg); updateui(); ; ).start(); Listing 22: Programm beenden private void updateui() { if (isdone) { Toast.makeText(getApplicationContext(),"All image save as " + getpath(), Toast.LENGTH_LONG).show(); else Toast.makeText(getApplicationContext(),"Error when write to SDcard", Toast.LENGTH_LONG).show(); this.finish(); Listing 23: Meldung für den Erfolg des Speicherns 47

4.3.2.15. Dialog löschen Dialog wird gelöscht bevor die Applikation beendet. @Override protected void onpause() { super.onpause(); if (progressdialog.isshowing()) progressdialog.dismiss(); Listing 24: Dialog löschen 4.3.2.16. Back Ereignis @Override public boolean onkeydown(int keycode, KeyEvent event) { if (keycode == KeyEvent.KEYCODE_BACK && event.getrepeatcount() == 0) { processexit(); return true; Listing 25: Handlung von der Back Taste von Android 48

KAPITEL 5: VALIDIERUNG UND BEWERTUNG 5.1. Validierung Zum Testen wird das Programm bei dem Handy HTC Sensation Z710e 19 mit der installierten Android - Version 2.3.4 in einem Wohngebäude ausgeführt. Der erste Punkt ist im Schlafzimmer (1), die zweite Stelle in der Küche (2) und letzte Scanstelle vor dem Haupteingang des Gebäudes (3). Ergebnis wird als Text Datei mit den nummerierten Stellen, alle verfügbaren WLAN Netzen, und zugehörigen Signalstärken in dbm. Alle Scanstellen werden auch in einer Image Datei geschrieben, also auf dem Plan dargestellt, damit der Nutzer weißt, wo er schon gescannt hat. Selbstverständlich hat fast jeder Plan einen Maßstab, so kann der Nutzer einfach navigieren, wo es im Gebäude zu scannen sein sollte. **************************** Point: 1 SSID: WLAN-65F294, Signal strength: -95dBm SSID: ALICE-WLAN16, Signal strength: -93dBm SSID: WLAN-4BA834, Signal strength: -86dBm SSID: FRITZ!Box Fon WLAN 7113, Signal strength: -83dBm SSID: EasyBox-E4F660, Signal strength: -80dBm SSID: WLAN-BE4766, Signal strength: -78dBm SSID: Q99, Signal strength: -41dBm Comment: Schlafzimmer **************************** Point: 2 SSID: WLAN-65F294, Signal strength: -95dBm SSID: ALICE-WLAN16, Signal strength: -93dBm SSID: WLAN-4BA834, Signal strength: -86dBm SSID: FRITZ!Box Fon WLAN 7113, Signal strength: -83dBm SSID: EasyBox-E4F660, Signal strength: -80dBm SSID: WLAN-BE4766, Signal strength: -78dBm SSID: Q99, Signal strength: -41dBm Comment: Kueche **************************** Point: 3 SSID: WLAN-2A3411, Signal strength: -91dBm SSID: WLAN-BE4766, Signal strength: -89dBm Comment: Hauseingang Abbildung 20: Textergebnis und Messungsstellen 19 : unterstützt WLAN 802.11 b/g/n 49