Arno Becker • Marcus Pant Android Grundlagen und Programmierung TJi dpunkt.verlag IX Inhaltsverzeichnis I Einführung 1 1.1 1.2 1.3 1.4 1.5 1.6 Ein erstes Beispiel Projekt anlegen Die erste Activity Layout definieren Activities aufrufen Das Android-Manifest Fazit 3 3 4 5 8 11 13 2 2.1 2.2 2.3 2.4 2.5 2.6 Systemaufbau Architekturübersicht Die Dalvik Virtual Machine Standardbibliotheken Der Anwendungsrahmen Android-Komponenten Die Klasse Context 15 15 17 19 19 20 21 3 3.1 3.2 3.3 3.4 Sicherheit Die Sandbox : Signieren von Anwendungen Berechtigungen '•>. Anwendungsübergreifende Berechtigungen • ?. .: 23 23 24 24 25 II Android in der Praxis 29 4 4.1 4.2 Projekt »Staumelder« Aus Sicht des Anwenders Iterationsplan 31 31 34 5 5.1 5.2 Iteration 1 - Oberflächengestaltung Iterationsziel Activities, Layouts und Views 37 37 37 Inhaltsverzeichnis 5.3 5.4 5.5 5.6 5.7 5.8 6 6.1 6.2 6.3 6.4 6.5 5.2.1 Grundbegriffe der Oberflächengestaltung 5.2.2 Zusammenwirken der Elemente 5.2.3 Theorie der Implementierung Ressourcen 5.3.1 Definition von Ressourcen 5.3.2 Zugriff auf Ressourcen 5.3.3 Text-Ressourcen 5.3.4 Farb-Ressourcen , 5.3.5 Formatvorlagen: Styles und Themes 5.3.6 Bilder 5.3.7 Multimediadaten Menüs 5.4.1 Allgemeine Menüdefinition 5.4.2 Optionsmenüs 5.4.3 Kontextmenüs 5.4.4 Dynamische Menügestaltung Das Android-Manifest Implementierung eines Bildschirmdialogs 5.6.1 Checkliste Dialogerstellung 5.6.2 Texte für Bildschirmseiten definieren .:..-.5.6.3 Multimedia-Ressourcen definieren 5.6.4 Bildschirmseite definieren 5.6.5 Menüs definieren 5.6.6 Activity implementieren 5.6.7 Android-Manifest anpassen 5.6.8 Bildschirmdialog im Emulator testen Tipps und Tricks 5.7.1 Scrolling 5.7.2 Umgebungsabhängige Ressourcen Fazit Iteration 2 - Oberflächen und Daten Zielsetzung Arbeiten mit Views 6.2.1 Zugriff auf Views ; 6.2.2 AdapterViews und Adapter Oberflächenereignisse Implementierung von Listendarstellungen 6.4.1 Bildschirmdialog definieren 6.4.2 Liste mit Daten füllen 6.4.3 Auf Listenauswahl reagieren Anwendungseinstellungen 6.5.1 Begriffsdefinitionen : : 38 38 39 41 41 42 44 45 46 49 50 51 51 53 54 56 56 57 57 58 59 59 63 64 67 68 69 70 71 74 75 75 75 76 78 79 80 80 81 83 84 84 Inhaltsverzeichnis 6.6 6.7 6.5.2 Einstellungen definieren 6.5.3 Auf Einstellungen zugreifen 6.5.4 Einstellungen bearbeiten Fortschrittsanzeige Fazit 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 Exkurs: Intents Warum gibt es Intents? Explizite Intents Implizite Intents .' Intent-Filter für implizite Intents Empfang eines Intent Intent-Resolution Sub-Activities Fazit 93 93 94 94 95 100 101 102 104 8 8.1 8.2 8.4 Iteration 3 - Hintergrundprozesse Iterationsziel Theoretische Grundlagen 8.2.1 Prozesse und Threads 8.2.2 Langlaufende Prozesse 8.2.3 Prozesse vs. Threads Implementierung 8.3.1 Services 8.3.2 Threads Fazit 105 105 106 106 107 108 109 109 131 138 9 9.1 9.2 9.3 9.4 9.5 9.6 Exkurs: Systemnachrichten Broadcast Intents Broadcast Receiver Dynamische Broadcast Receiver Statische Broadcast Receiver Meldungen an den Notification Manager Fazit 141 141 142 143 145 148 152 10 10.1 Exkurs: Dateisystem Aufbau des Dateisystems 10.1.1 SD-Karten 10.1.2 Berechtigungen Dateizugriffe 10.2.1 Verzeichnisverwaltung 10.2.2 Dateiverwaltung 8.3 10.2 ' :... ./. : 85 87 87 90 91 155 155 155 156 157 157 159 xi Inhaltsverzeichnis 11 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 12 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 13 13.1 13.2 Iteration 4 - Datenbanken Iterationsziel Wozu Datenbanken? Das Datenbanksystem SQLite Eine Datenbank erstellen , 11.4.1 Berechtigungen 11.4.2 Schemaverwaltung Datenzugriff programmieren 11.5.1 ,SQLiteDatabase - Verbindung zur Datenbank 11.5.2 Datenbankanfragen : 11.5.3 Ergebnistyp Gursor 11.5.4 Änderungsoperationen Datenzugriff per Kommandozeile Alternative zu SQLite Implementierung 11.8.1 Ein Architekturvorschlag ..-. 11.8.2 Das Schema erstellen 11.8.3 Anfrageergebnisse an der Oberfläche darstellen Fazit 161 161 161 162 163 163 164 166 167 168 173 175 178 180 180 181 183 184 186 Iteration 5 - Content Provider Iterationsziel Grundbegriffe Auf Content Provider zugreifen 12.3.1 Content-URIs 12.3.2 Zugriff über implizite Intents 12.3.3 Zugriff über Content Resolver Content Provider erstellen 12.4.1 Allgemeines y. 12.4.2 Datenbank-Zugriffsmetlipden 12.4.3 Datei-Zugriffsmethoden Asynchrone Operationen Deployment Alternativen zum Content Provider Implementierung 12.8.1 Ein Datenbank-Content-Provider 12.8.2 Fazit 12.8.3 Ein Datei-Content-Provider 189 189 190 191 191 193 194 196 197 198 199 200 202 203 204 204 215 216 Exkurs: Lebenszyklen Prozess-Management Lebenszyklus von Komponenten 13.2.1 Lebenszyklus einer Activity 219 219 221 221 Inhaltsverzeichnis 13.3 14 14.1 14.2 14.3 14.4 15 15.1 15.2 15.3 15.4 13.2.2 Lebenszyklus eines Service 13.2.3 Lebenszyklus eines Broadcast Receivers 13.2.4 Activities: Unterbrechungen und Ereignisse Beispiele aus der Praxis 13.3.1 Beispiel: Kalender-Activity 13.3.2 Beispiel: E-Mail-Programm 13.3.3 Beispiel: Quick-and-dirty-Altemative Iteration 6 - Netzwerk und Datenübertragung Iterationsziel .' Theoretische Grundlagen 14.2.1 Das Emulator-Netzwerk 14.2.2 Die Internet-Einbahnstraße 14.2.3 Androids Netzwerkunterstützung 14.2.4 Arten der Netzwerkübertragung Netzwerken in der Praxis ' 14.3.1 Verfahren 1: Stau melden ' 14.3.2 Daten zum Stauserver übertragen 14.3.3 Verfahren 2: dauerhafte Verbindungen Fazit Iteration 7 - Location Based Services Iterationsziel Theoretische Grundlagen 15.2.1 GPS, KML und GPX 15.2.2 Entwickeln im Emulator 15.2.3 Debug Maps API-Key erstellen Praxisteil 15.3.1 Vorbereitung 15.3.2 Der Location Manager 15.3.3 Google Maps 15.3.4 MapActivity Fazit III Android für Fortgeschrittene 16 16.1 16.2 223 224 224 229 229 230 232 Debugging und das DDMS-Tool Anschluss eines Android-Geräts per USB DDMS: Dalvik Debug Monitor Service 16.2.1 Emulator Control 16.2.2 Debugging . /. : .' 235 235 236 236 238 239 240 241 242 248 250 259 261 261 262 262 262 263 265 265 266 270 271 276 277 279 279 280 281 284 Inhaltsverzeichnis 17 17.1 17.2 17.3 Anwendungen signieren Vorbereitung Ein eigenes Zertifikat erzeugen Eine Android-Anwendung signieren 285 285 286 288 18 18.1 18.2 Sicherheit und Verschlüsselung Sicherheit Verschlüsselung 18.2.1 Verschlüsselte Datenübertragung 18.2.2 Daten oder Objekte verschlüsseln 18.2.3 Verschlüsselung anwenden 289 289 291 292 308 311 19 19.1 19.2 19.3 19.4 Unit- und Integrationstests Allgemeines Tests von Nicht-Android-Komponenten Tests von Android-Komponenten 19.3.1 Instrumentierung 19.3.2 Wahl der Testklasse 19.3.3 Beispiel: Test einer Activity Ausblick 313 313 314 316 316 318 319 322 20 20.1 20.2 20.3 20.4 Optimierung und Performance Erste Optimierungsregeln Datenobjekte Cursor oder Liste? Time is Akku! 323 323 324 324 325 21 21.1 21.2 Das Android-SDK Unterschiede zum Java-SDK Wege aus der Krise y 327 327 328 Literaturverzeichnis , , 331