Programmiererfahrungen mit Android

Ähnliche Dokumente
Android-Apps weitere Möglichkeiten

Übungen zur Android Entwicklung

Teil I Augmented Learning - Vortragender: Krischan Udelhoven. Teil II Android - Vortragender: Folker Hoffmann

Beispiel droidremoteppt

Naviki GPS-Anwendungsentwicklung für Mobiltelefone

Theorie zu Übung 8 Implementierung in Java

2. Hintergrundverarbeitung in Android: Services und Notifications

Inhaltsverzeichnis. Apps für Android entwickeln

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

Android Processes & Services

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

1 Einführung 1. 2 Einrichten der Arbeitsumgebung 9. 3 Schnelleinstieg in Xcode und Objective-C 25

Android User Interface

Programmieren für mobile Endgeräte SS 2013/2014. Dozenten: Patrick Förster, Michael Hasseler

Entwickeln für Android OS

Probeklausur: Programmierung WS04/05

Accounts und Kontakte in Android

4. Software-Komponenten in Android

Java - Webapplikationen

11. Komponenten Grundlagen der Programmierung 1 (Java)

Smartphone Entwicklung mit Android und Java

0. Inhaltsverzeichnis

Themen. Web Service - Clients. Kommunikation zw. Web Services

iphone app - Arbeitszeitüberwachung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Klausur Grundlagen der Programmierung

Einstieg in die Informatik mit Java

Mobile App Development. - Alarm -

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

Welche Informatik-Kenntnisse bringen Sie mit?

Konzeption eines Backends für eine Liquid-Bedienoberfläche

Probeklausur: Programmierung WS04/05

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Android GUI Entwicklung

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Apps Programmierung von Android-Smartphones

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

RO-Tutorien 3 / 6 / 12

Mobile App Development. - Einführung -

Software Engineering Klassendiagramme Einführung

5.5.8 Öffentliche und private Eigenschaften

6 Speicherorganisation

AuD-Tafelübung T-B5b

Mobile Anwendungen Google Cloud Messaging

6 Oberflächen und Daten

Überleben im Funkloch

Mock-Objekte. Universität Karlsruhe (TH) Fakultät für Informatik Lehrstuhl für Programmiersysteme. Forschungsuniversität gegründet 1825

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

ESB - Elektronischer Service Bericht

Android-Apps ein komplexes Beispiel (Google-Maps und GPS-Daten, Listen, SD-Kartenzugriff, Activities mit Rückgabewerten und Web-Browser/Internet)

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Handbuch für die Erweiterbarkeit

Fakultät Angewandte Informatik Programmierung verteilter Systeme Übungen zur Vorlesung Informatik II, Blatt 6

Asynchrone Webservices mit Axis 1.x in Java

Drei-Schichten-Architektur. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 16: 3-Schichten-Architektur 1 Fachkonzept - GUI

Mainframe Internet Integration. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth SS2013. WebSphere Application Server Teil 4

Java-Programmierung. Remote Method Invocation - RMI

Java: Eine kurze Einführung an Beispielen

PHP Kurs Online Kurs Analysten Programmierer Web PHP

Android VPN. Am Beispiel eines Netzwerktunnels für das Domain Name System (DNS) 1 Andiodine - Android DNS-VPN

Typo 3 installieren. Schritt 1: Download von Typo3

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Studentische Lösung zum Übungsblatt Nr. 7

Delegatesund Ereignisse

Beispiel für überladene Methode

Software-Projekt: Mensch ärgere Dich nicht. Dokumentation Softwareprojekt: Mensch ärgere Dich nicht

Extending tl_member. Andreas Fieger

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Java Einführung Abstrakte Klassen und Interfaces

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Arno Becker Marcus Pant. Android. Grundlagen und Programmierung. I dpunkt.verlag

Android + Arduino Hardware steuern mit Android. Entwicklertag Karlsruhe, Sebastian Wastl

Klausur Software-Entwicklung September 00

3 Objektorientierte Konzepte in Java

Technische Dokumentation RouterInfo

Kommentierung in C. Kommentierung in C. Von Sebastian Rothe 1/26. Kommentierung in C

HSR git und subversion HowTo

Anleitung. Spam Filter mit Quarantäne Eine kurze Funktionsübersicht. Internet- & Netzwerk-Services

Programmieren 2 Java Überblick

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

JTable. W. Lang HWR Berlin, SS

Einführung in die Cross-Plattform Entwicklung Web Services mit dem Intel XDK

Grafische Benutzeroberflächen

Remote Method Invocation

App CCTV INET VIEWER. Folgende Funktionen stehen in der App zur Verfügung:

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Apps für ios entwickeln

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

JOGGA Der Jogging-Companion

Transkript:

Programmiererfahrungen mit Android Arthur Thiessen & Senad Licina Wissenschaftliches Rechnen Fachbereich Informaitk, Uni Hamburg 24.03.2010 1 / 41 Tetroid 1 Spielgeschichte Spielkonzept 2 Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities 3 4 Übersicht 2 / 41

Spielgeschichte Tales of a Lengendary Videogame Spielgeschichte Spielkonzept Juni 1984 - Alexei Leonidowitsch Paschitnow erfindet Pentomino dient als Vorlage Lizenzproblematik Nintendo Gameboy 3 / 41 Spielkonzept for beginners Spielgeschichte Spielkonzept 4 Blöcke = 1 Stein Steine fallen von Oben volle Zeilen werden gelöscht Punktesystem Levelsystem Game Over! 4 / 41

Steine Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities Datentyp Array of Array of int! Operationen Positionsveränderung Rotation { { 0, 0, 0, 0, 0, { 0, 1, 1, 0, 0, { 0, 0, 1, 1, 0, { 0, 0, 0, 0, 0, { 0, 0, 0, 0, 0 5 / 41 Spielbrett Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities Datentyp Array of Array of int! Operationen Stein ins Brett legen Zeilen Löschen Kollisionsabfrage Game Over! { {1,1,1,1,1,1,1,1,1,1,1,1 6 / 41

Spieldynamik und Grafik Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities Thread & Schleife vs. Timer runonuithread(); Views anpassen (TextView)findViewById(R.id.MyTextView); gewünschte funktionen aurfufen fertig! GridLayout & ImageView Elemente lassen sich immer seperat auswählen Fehlschlag! :( FrameLayout & RectViews RectView extrends View beinhaltet ein ShapeDrawable performance 7 / 41 Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities Übergabe von Daten zwischen Activities Daten werden über das Intent an eine andere Activity übergeben mit der,,putextra -Methode werden Daten in dem Intent gelagert mit der,,getextras -Methoden werden Daten vom Intent ausgelesen in Intents können nur Bestimmte Datentypen übergeben werden java.io.serializable vs. android.os.parcelable 8 / 41

Stein Spielbrett Spieldynamik und Grafik Übergabe von Daten zwischen Activities Übergabe von Daten zwischen Activities,,alte Activity Intent meinintent = new Intent(this, NeueActivity.class); meinintent.putextra("meinstring", "have you tried to turn it OFF and ON again?"); meinintent.putextra("meininteger", 42); startactivity(meinintent);,,neue Activity Bundle meinbundle = getintent().getextras(); String meinstring = (String)bundle.get("meinString"); int meininteger = (int)bundle.get("meininteger"); 9 / 41 Zwei Spieler sollen gegeneinander spielen können jeder von seinem Gerät aus Sichtbar auf dem Display das eigene Spielfeld das Spielfeld vom Gegner nächster Stein Punktzahl 10 / 41

Server Möglichst geringe Bedeutung (zwecks P2P) Übernimmt die Rolle des Vermittlers von Spielern Client Möglichst Peer2Peer Bluetooth/Internet Hohe Performance Bedienbarkeit (Tasten/) Minimaler Traffic 11 / 41 Überblick 12 / 41

Tetroid Server reaktiver Akteur Einfacher TCP Socket Listener Empfängt Nachrichten vom Client Login Logout UserList Request Versendet Antworten an Client 13 / 41 Tetroid Client aktiver Aktuer Spielmechanik P2P Kommunikation Sensorsteuerung 14 / 41

Tetroid Client Bluetooth: Pro Contra kostenlos überall verfügbar weit verbreitet gute Dokumentation erst ab Android 2.0 somit nur auf modernsten Handys testbar inoffizielle Bibliotheken nicht zu gebrauchen kleine Reichweite Internet: Pro Contra große Reichweite gewohnte Socket Programmierung wird ohnehin für Kommunikation mit Server verwendet Kostenfaktor Empfang 15 / 41 Bluetooth Seit API Level 5 (Android 2.0) stehen uns 8 Klassen zur Verfügung: BluetoothAdapter: repräsentiert das lokale BT Gerät BluetoothDevice: repräsentiert ein externes BT-Gerät BluetoothServerSocket: hört auf eingehende Verbindungen BluetoothSocket: initiiert eine Verbindung BluetoothClass: grundsätzliche Charakteristika von BT-Geräten 16 / 41

Bluetooth Um Bluetooth nutzen zu können, muss man die Berechtigungen in der Android-Manifest XML anpassen: permission.bluetooth <manifest...> <uses-permission android:name=\android.permission.bluetooth\ /> </manifest> Möchte man einen DeviceScan durchführen, so braucht man ADMIN: permission.bluetooth ADMIN <manifest...> <uses-permission android:name=\android.permission.bluetooth_admin\ /> </manifest> 17 / 41 Bluetooth Beispiel Programm zum Suchen & Anzeigen von BT-Geräten BluetoothAdapter mbluetoothadapter = BluetoothAdapter.getDefaultAdapter(); if (!mbluetoothadapter.isenabled()) { Intent enablebtintent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startactivityforresult(enablebtintent, REQUEST_ENABLE_BT); private final BroadcastReceiver mreceiver = new BroadcastReceiver() { public void onreceive(context context, Intent intent) { String action = intent.getaction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getparcelableextra( BluetoothDevice.EXTRA_DEVICE); marrayadapter.add(device.getname() + "\n" + device.getaddress()); ; IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerreceiver(mreceiver, filter); 18 / 41

Bluetooth ein Vorteile Wider Erwartungen (theoretisch) sehr leicht zu handhaben Top Dokumentation & Guides Nachteile Emulator unterstützt (noch) kein Bluetooth Leider sind die genannten Funktionalitäten erst ab Android 2.0 so verfügbar. Möchte man dennoch Bluetooth vor Version 2.0 nutzen, so muss man ggf. die inoffizielle Bluetooth API verwenden (http://code.google.com/p/androidbluetooth/) 19 / 41 Übersicht Übersicht Es gibt 2 Klassen, mit deren Hilfe man auf die Android bezug nehmen kann: SensorManager ist ein SystemService und verwaltet sämtliche dem Android bekannte SensorEventListener sollte von einer Klasse implementiert werden, die bestimmte ereignisse verarbeiten soll 20 / 41

Übersicht Übersicht Tetroid bietet eine Sensorunterstützung zur Spielsteuerung an. Es handelt sich um Beschleunigungssensoren entlang der X, Y und der Z Achse. 21 / 41 Codebeispiel Übersicht Codebeispiel Public class TetroidSensor implements SensorEventListener{ Public TetroidSensor(Activity a){ SensorManager sm = (SensorManager)a.getSystemService( Activity.SENSOR_SERVICE); sm.registerlistener(sm.getsensorlist(sensor.type_accelerometer)); Public synchronized onsensorchanged(sensorevent // verarbeite event // wichtig! Verzögerung einbauen! event){ 22 / 41

Übersicht Vorteile funktioniert gut und präzise mit wenig Code erreicht man schnelle Ergebnisse Nachteile wenig Dokumentation erfordert grundlegendes Verständnis von Listenern und Events 23 / 41 HH-Plan 5 an das App 6 Zugriff auf Services Verwendete Klassen Lokalisierung 7 Was sind Implementierung 8 Einsatz Anfrage Antwort 24 / 41

an das App Fahrplanauskunft für die öffentlichen Verkehrsmittel Hamburgs über das Android Warum nicht einfach mit geofox? weniger Aufwand für den Benutzer weniger Traffic (spart ggf. Kosten) kürzere Wartezeit als über den Browser Android stellt eine gute Plattform dar 25 / 41 an das App an das App Fahrplanauskunft Bring me Home GPS-Koodinaten auswertung 26 / 41

Zugriff auf Services Zugriff auf Services Verwendete Klassen Lokalisierung um Zugriff auf bestimmte Services zu erhalten (z.b. Internet, GPS), braucht man ersteinmal eine Berechtigung dazu dem Benutzer werden die Berechtigungen bei der Installation von Apps angezeigt Berechtigungen werden im Android Manifest festgelegt Internet-Permission <uses-permission android:name="android.permission.internet"/> 27 / 41 Verwendete Klassen Zugriff auf Services Verwendete Klassen Lokalisierung android.location.location repräsentiert eine geographische Position es werden u.a. Breiten- & Längengrad, Uhrzeit, Geschwindigkeit und Genauigkeit gespeichert android.location.locationmanager ist ein Systemservice, auf den man zugreifen kann bietet eine Vielzahl von Methoden android.location.locationlistener wird beim LocationManager angemeldet ruft onlocationchanged auf, wenn sich die Geoposition verändert android.location.geocoder eine Klasse, die zum,,geocoding benutzt wird als geocoding bezeichnet man den Prozess eine Adresse in eine geographische Position umzuwandeln. reverse geocoding 28 / 41

android.location.location Zugriff auf Services Verwendete Klassen Lokalisierung Initialisierung context = >Aktuelle Activity< lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); latitude = lm.getlastknownlocation(locationmanager.gps_provider).getlatitude(); longitude = lm.getlastknownlocation(locationmanager.gps_provider).getlongitude(); lm.requestlocationupdates(locationmanager.gps_provider,5000,0,>locationlistener<); LocationListener public void onlocationchanged(location location) { latitude = location.getlatitude(); longitude = location.getlongitude(); Location AddressList Address Straße gc = new Geocoder(_context); addresslist = gc.getfromlocation(latitude, longitude, >maxresults<); String addressneartolocation = addresslist.get(0).getaddressline(0); 29 / 41 Was sind Implementierung bieten eine Art GUI, welche auf die Activity,,gelegt werden kann können aufgerufen werden, ohne die aktuelle Activity zu beenden eigenen sich z.b. um: Fehlermeldungen/Warnungen/Nachrichten auszugeben Ladebalken anzuzeigen Anfragen an den Benutzer zu stellen Auswahlmöglichkeiten auszugeben alles was du programmieren kannst! 30 / 41

Wie erzeugt werden Was sind Implementierung Aufruf aus der Activity static final int MEIN_DIALOG_ID = 0; protected Dialog oncreatedialog(int id) { Dialog dialog; switch(id) { case MEIN_DIALOG_ID: dialog = new Dialog(getApplicationContext()); dialog.setcontentview(r.layout.meindialoglayout); dialog.settitle("mein Dialog"); // passe die Anzeige auf meinem Dialog an break; default: dialog = null; return dialog; public void zeigemeinendialog() { showdialog(mein_dialog_id); 31 / 41 Wie erzeugt werden Was sind Implementierung Erzeugung eines PickTime int minutes = _datetime.getminutes(); int hours = _datetime.gethours(); result = new TimePickerDialog(>context<, >OnTimeSetListener<, hours, minutes, true); OnTimeSetListener public void ontimeset(timepicker view, int hourofday, int minute) { >context<.sethours(hourofday); >context<.setminutes(minute); >context<.updatetime(); 32 / 41

Einsatz Einsatz Anfrage Antwort Überall dort, wo der direkte Zugriff auf Datenbanken wenig sinnvoll ist Eliminiert Kompatibilitätsprobleme Sicherheitsaspekte So kann der (partielle) Zugriff auf eine Datenbank ermöglicht werden, ohne dass dem Anwenderprogramm der direkte Zugang gestattet werden muss. Über die -Schnittstelle kann die Menge der ausführbaren Methoden reglementiert und definiert werden. 33 / 41 Struktur Einsatz Anfrage Antwort 34 / 41

Anfrage Einsatz Anfrage Antwort -Anfrage <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body> <m:getprice xmlns:m="http://www.w3schools.com/prices"> <m:item>apples</m:item> </m:getprice> </soap:body> </soap:envelope> 35 / 41 Antwort Einsatz Anfrage Antwort -Antwort <?xml version="1.0"?> <soap:envelope xmlns:soap="http://www.w3.org/2001/12/soap-envelope" soap:encodingstyle="http://www.w3.org/2001/12/soap-encoding"> <soap:body> <m:getpriceresponse xmlns:m="http://www.w3schools.com/prices"> <m:price>1.90</m:price> </m:getpriceresponse> </soap:body> </soap:envelope> 36 / 41

Einsatz Anfrage Antwort Vorteile Universelles Nachrichtenformat Sicherheit Kontrolle über Daten Einfache Handhabung Nachteile Viel Overhead durch XML Zusätzlicher Programmieraufwand durch XML Parser 37 / 41 eine subjektive Meinung Abschließendes Subjektive Meinung zur Entwicklungsumgebung von Android Zusammenfasuung Fragen Quellenangabe 38 / 41

Zusammenfassung Abschließendes Subjektive Meinung zur Entwicklungsumgebung von Android Zusammenfasuung Fragen Quellenangabe Was wir gelernt haben: eine Technische Realisierungsmöglichkeit von kennengelernt wie man die anspricht und was man zu beachten hat wie man auf den GPS-Service zugreift, was man dabei beachten muss und wie man diese Daten verwerten kann was sind und wie / wozu man diese einsetzt Grundlagen über -Services 39 / 41 Fragen? Abschließendes Subjektive Meinung zur Entwicklungsumgebung von Android Zusammenfasuung Fragen Quellenangabe 40 / 41

Quellenangabe Abschließendes Subjektive Meinung zur Entwicklungsumgebung von Android Zusammenfasuung Fragen Quellenangabe http://developer.android.com 41 / 41