Ausführliches Inhaltsverzeichnis
1 Android stellt sich vor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 Warum Java? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Einschränkungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Android-Endgeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3.1 G1 von HTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3.2 G2 von HTC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Android Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4.1 Der Android System Stack . . . . . . . . . . . . . . . . . . . . 5
1.4.2 Linux Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.3 Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.4.4 Android Runtime . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4.5 Application Framework . . . . . . . . . . . . . . . . . . . . . 9
1.4.6 Applikationen . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.5 Open Handset Alliance . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.1 Endgerätehersteller . . . . . . . . . . . . . . . . . . . . . . . . 10
1.5.2 Mobilfunkbetreiber . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5.3 Softwarefirmen . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.5.4 Halbleiterfirmen . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.5.5 Commercialization Companies . . . . . . . . . . . . . . . . . 14
1.5.6 Die Android-Strategie von Google . . . . . . . . . . . . . . . 14
1.5.7 Google/OHA gegen Nokia/Symbian . . . . . . . . . . . . . 15
2 Erste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1 Android sagt „Hallo“ . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.1.1 Die Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2 Androids Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.1 System-Voraussetzungen (engl. system requirements) . . . . 19
2.2.2 Installation auf einem PC . . . . . . . . . . . . . . . . . . . . 19
2.3 Beispielprogramme im Android SDK . . . . . . . . . . . . . . . . . . 21
2.3.1 Installieren der ApiDemo-Beispielprogramme . . . . . . . . 22
3 Android Development Tools . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1 Android Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.1 Android Emulator . . . . . . . . . . . . . . . . . . . . . . . . 25
3.1.2 Android Development Tools(ADT)-Plugin . . . . . . . . . . 27
3.1.3 Hierarchy Viewer . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1.4 Draw 9-Patch . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.1.5 Dalvik Debug Monitor Service (DDMS) . . . . . . . . . . . . 30
3.1.6 Android Debug Bridge (adb) . . . . . . . . . . . . . . . . . . 33
3.1.7 Android Asset Packaging Tool (aapt) . . . . . . . . . . . . . 34
3.1.8 Android Interface Description Language (aidl) . . . . . . . . 35
3.1.9 sqlite3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.10 mksdcard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.11 Traceview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.1.12 dx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.1.13 UI/Application Exerciser Monkey . . . . . . . . . . . . . . . 37
3.1.14 activitycreator . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2 Android auf einem Gerät . . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2.1 Treiberinstallation . . . . . . . . . . . . . . . . . . . . . . . . 38
3.2.2 Screenshots . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4 Vermarktung von Android-Applikationen . . . . . . . . . . . . . . . . . 43
4.1 Generelle Erfolgsfaktoren mobiler Applikationen . . . . . . . . . . . 43
4.1.1 Technische Qualität der mobilen Applikation . . . . . . . . . 44
4.1.2 Marktforschung – Nutzerperspektive . . . . . . . . . . . . . 44
4.1.3 Benutzerfreundlichkeit der mobilen Applikation . . . . . . . 45
4.1.4 Nutzen der mobilen Applikation . . . . . . . . . . . . . . . . 45
4.1.5 Wettbewerbsvorteil der mobilen Applikation . . . . . . . . . 48
4.1.6 Marke – Markenführung – Branding . . . . . . . . . . . . . . 49
4.1.7 Kommunikation mit den Nutzern . . . . . . . . . . . . . . . 49
4.2 Android Market . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.2.1 Android Market aus der Nutzerperspektive . . . . . . . . . 51
4.2.2 Android Market aus der Anbieterperspektive . . . . . . . . 52
4.2.3 Fallbeispiel: Android Market aus Nutzersicht . . . . . . . . 54
4.3 Weitere Android-Portale . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.1 Handango . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.3.2 Androidgear . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
4.4 Distribution von Android-Applikationen auf der eigenen Website . 59
4.5 Suchmaschinenmarketing . . . . . . . . . . . . . . . . . . . . . . . . 60
4.5.1 Suchmaschinenwerbung . . . . . . . . . . . . . . . . . . . . . 60
4.5.2 Suchmaschinenoptimierung . . . . . . . . . . . . . . . . . . . 68
5 Applikationen und Aktivitäten . . . . . . . . . . . . . . . . . . . . . . . 73
5.1 Komponenten einer Applikation . . . . . . . . . . . . . . . . . . . . 73
5.1.1 Die Manifestdatei . . . . . . . . . . . . . . . . . . . . . . . . . 74
5.2 Der Lebenszyklus einer Applikation . . . . . . . . . . . . . . . . . . 77
5.3 Ressourcen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.3.1 Ressourcen im Ordner res/values . . . . . . . . . . . . . . . 80
5.3.2 Verwendung der Ressourcen im Code . . . . . . . . . . . . . 82
5.3.3 Ressourcen für Lokalisierung und Hardware . . . . . . . . . 83
5.4 Aktivitäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.4.1 Der Lebenszyklus einer Aktivität . . . . . . . . . . . . . . . . 86
6 Intent und BroadcastReceiver . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1 Die Klasse Intent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.1.1 Aktivitäten mit Intents starten . . . . . . . . . . . . . . . . . 90
6.1.2 Rückgabedaten von Aktivitäten . . . . . . . . . . . . . . . . 90
6.1.3 Intent Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
6.2 BroadcastReceiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7 Androids Benutzungsschnittstellen . . . . . . . . . . . . . . . . . . . . . 97
7.1 XML-basierte Layouts . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.1.1 Die Klasse View . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.1.2 Die Klasse AnalogClock . . . . . . . . . . . . . . . . . . . . . 104
7.1.3 Die Klasse ImageView . . . . . . . . . . . . . . . . . . . . . . 105
7.1.4 Die Klasse ImageButton . . . . . . . . . . . . . . . . . . . . . 106
7.1.5 Die Klasse ProgressBar . . . . . . . . . . . . . . . . . . . . . . 108
7.1.6 Die Klassen AbsSeekBar, RatingBar und SeekBar . . . . . . . 109
7.1.7 Die Klassen SurfaceView und VideoView . . . . . . . . . . . 109
7.1.8 Die Klasse TextView . . . . . . . . . . . . . . . . . . . . . . . 111
7.1.9 Die Klasse Button . . . . . . . . . . . . . . . . . . . . . . . . . 116
7.1.10 Die Klasse CompoundButton . . . . . . . . . . . . . . . . . . 116
7.1.11 Die Klasse CheckBox . . . . . . . . . . . . . . . . . . . . . . . 117
7.1.12 Die Klasse RadioButton . . . . . . . . . . . . . . . . . . . . . 117
7.1.13 Die Klasse ToggleButton . . . . . . . . . . . . . . . . . . . . . 117
7.1.14 Die Klasse CheckedTextView . . . . . . . . . . . . . . . . . . 118
7.1.15 Die Klasse Chronometer . . . . . . . . . . . . . . . . . . . . . 118
7.1.16 Die Klasse DigitalClock . . . . . . . . . . . . . . . . . . . . . 118
7.1.17 Die Klasse EditText . . . . . . . . . . . . . . . . . . . . . . . . 119
7.1.18 Die Klassen AutoCompleteTextView und MultiAutoCompleteTextView . 119
7.1.19 Die Klasse ViewGroup . . . . . . . . . . . . . . . . . . . . . . 120
7.1.20 Die Klasse AbsoluteLayout . . . . . . . . . . . . . . . . . . . 122
7.1.21 Die Klasse WebView . . . . . . . . . . . . . . . . . . . . . . . 124
7.1.22 Die Klasse AdapterView . . . . . . . . . . . . . . . . . . . . . 124
7.1.23 Die Klasse AbsListView . . . . . . . . . . . . . . . . . . . . . 124
7.1.24 Die Klasse GridView . . . . . . . . . . . . . . . . . . . . . . . 124
7.1.25 Die Klasse ListView . . . . . . . . . . . . . . . . . . . . . . . 125
7.1.26 Die Klasse ExpandableListView . . . . . . . . . . . . . . . . 126
7.1.27 Die Klasse AbsSpinner . . . . . . . . . . . . . . . . . . . . . . 127
7.1.28 Die Klasse Gallery . . . . . . . . . . . . . . . . . . . . . . . . 128
7.1.29 Die Klasse Spinner . . . . . . . . . . . . . . . . . . . . . . . . 128
7.1.30 Die Klasse FrameLayout . . . . . . . . . . . . . . . . . . . . . 129
7.1.31 Die Klasse DatePicker . . . . . . . . . . . . . . . . . . . . . . 130
7.1.32 Die Klasse MediaController . . . . . . . . . . . . . . . . . . . 130
7.1.33 Die Klasse ScrollView . . . . . . . . . . . . . . . . . . . . . . 131
7.1.34 Die Klasse TabHost . . . . . . . . . . . . . . . . . . . . . . . . 131
7.1.35 Die Klasse TimePicker . . . . . . . . . . . . . . . . . . . . . . 131
7.1.36 Die Klassen ViewAnimator und ViewFlipper . . . . . . . . . 131
7.1.37 Die Klassen ViewSwitcher, ImageSwitcher und TextSwitcher 132
7.1.38 Die Klasse LinearLayout . . . . . . . . . . . . . . . . . . . . . 132
7.1.39 Die Klasse RadioGroup . . . . . . . . . . . . . . . . . . . . . 132
7.1.40 Die Klasse TabWidget . . . . . . . . . . . . . . . . . . . . . . 134
7.1.41 Die Klassen TableLayout und TableRow . . . . . . . . . . . . 134
7.1.42 Die Klasse ZoomControls . . . . . . . . . . . . . . . . . . . . 136
7.1.43 Die Klasse MapView . . . . . . . . . . . . . . . . . . . . . . . 136
7.1.44 Die Klasse RelativeLayout . . . . . . . . . . . . . . . . . . . . 136
7.1.45 Die Klasse TwoLineListItem . . . . . . . . . . . . . . . . . . . 139
7.1.46 Die Klasse ViewStub . . . . . . . . . . . . . . . . . . . . . . . 140
7.2 Klassendiagramme der Views und ViewGroups . . . . . . . . . . . 141
7.3 Das Werkzeug Hierarchy Viewer . . . . . . . . . . . . . . . . . . . . 141
7.4 Das Werkzeug DroidDraw . . . . . . . . . . . . . . . . . . . . . . . . 141
7.5 Methoden zur Verwaltung der Klasse View . . . . . . . . . . . . . . 143
7.5.1 Position, Größe und Abstände eines Views . . . . . . . . . . 143
7.5.2 Der Layoutvorgang und das Zeichnen des Views . . . . . . 145
7.5.3 Behandlung des Fokus und der Sichtbarkeit . . . . . . . . . 146
8 Ereignisse der Benutzungsschnittstellen . . . . . . . . . . . . . . . . . . 149
8.1 Die Listener der Klasse View . . . . . . . . . . . . . . . . . . . . . . 149
8.2 Ereignisbehandlung für Klicks . . . . . . . . . . . . . . . . . . . . . 150
8.3 Ereignisbehandlung für Tastatureingaben . . . . . . . . . . . . . . . 154
8.4 Ereignisbehandlung bei Änderung des Fokus . . . . . . . . . . . . . 158
8.5 Ereignisbehandlung bei Berührung des Bildschirms . . . . . . . . . 163
8.6 Ereignisbehandlung bei den Klassen RatingBar und SeekBar . . . . 166
8.7 Ereignisbehandlung bei den Klassen CompoundButton, CheckBox, RadioButton und ToggleButton . . 166
8.8 Ereignisbehandlung bei der Klasse ViewGroup . . . . . . . . . . . . 167
8.9 Ereignisbehandlung bei der Klasse AdapterView . . . . . . . . . . . 167
8.10 Ereignisbehandlung bei der Klasse AbsListView . . . . . . . . . . . 168
8.11 Ereignisbehandlung bei der Klasse ExpandableListView . . . . . . 168
8.12 Ereignisbehandlung bei den Klassen DatePicker und TimePicker . 173
8.13 Ereignisbehandlung bei der Klasse TabHost . . . . . . . . . . . . . . 174
8.14 Ereignisbehandlung bei der Klasse RadioGroup . . . . . . . . . . . 176
8.15 Ereignisbehandlung bei der Klasse ViewStub . . . . . . . . . . . . . 176
9 Options- und Kontextmenüs . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.1 Optionsmenüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.1.1 Untermenüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
9.2 Kontextmenüs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10 Dialoge und Toasts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.1 Die Klasse Dialog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
10.1.1 Die Klasse AlertDialog . . . . . . . . . . . . . . . . . . . . . . 191
10.1.2 Spezialisierte Dialoge . . . . . . . . . . . . . . . . . . . . . . 192
10.1.3 Persistente Dialoge . . . . . . . . . . . . . . . . . . . . . . . . 193
10.2 Aktivitäten als Dialoge . . . . . . . . . . . . . . . . . . . . . . . . . . 194
10.3 Toast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
11 Hintergrundarbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.1 Die Klasse Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
11.2 Threads für die Arbeit im Hintergrund . . . . . . . . . . . . . . . . . 200
11.3 Toasts in Arbeitsthreads . . . . . . . . . . . . . . . . . . . . . . . . . 202
11.4 Benachrichtigungen mit der Klasse Notification . . . . . . . . . . . 203
11.4.1 Eigenschaften einer Benachrichtigung . . . . . . . . . . . . . 206
11.4.2 Benachrichtigung über T¨ one . . . . . . . . . . . . . . . . . . 206
11.4.3 Benachrichtigung mit Vibration . . . . . . . . . . . . . . . . . 206
11.4.4 Benachrichtigung mit LEDs . . . . . . . . . . . . . . . . . . . 207
11.5 Alarme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
12 Daten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
12.1 Einstellungen und Zustand speichern . . . . . . . . . . . . . . . . . 209
12.1.1 Zustand einer Aktivität speichern . . . . . . . . . . . . . . . 209
12.1.2 Einstellungen speichern . . . . . . . . . . . . . . . . . . . . . 212
12.2 Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
12.2.1 Dateien auf der SD-Karte . . . . . . . . . . . . . . . . . . . . 216
12.3 Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
12.3.1 Komplexere Datenbankanfragen . . . . . . . . . . . . . . . . 221
12.4 Content Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
12.4.1 Verwendung eines ContentProviders . . . . . . . . . . . . . 225
12.4.2 Implementierung eines ContentProviders . . . . . . . . . . . 231
13 SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
13.1 Senden einer SMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
13.1.1 Senden und Ausliefern kontrollieren . . . . . . . . . . . . . . 235
13.2 Empfangen einer SMS . . . . . . . . . . . . . . . . . . . . . . . . . . 235
13.3 Beispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
14 Android im Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
14.1 Die Klasse WebView . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
14.2 Internet-Ressourcen nutzen . . . . . . . . . . . . . . . . . . . . . . . 243
14.2.1 Verbindung mit einer Internet-Ressource über HTTP . . . . 243
14.2.2 Verbindung zu einer Internet-Ressource über HTTPS . . . . 247
14.2.3 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
14.2.4 Socket und Datagram . . . . . . . . . . . . . . . . . . . . . . 250
14.3 Web-Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
15 Location Based Services . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
15.1 Lokalisierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
15.2 Das Android LBS-API . . . . . . . . . . . . . . . . . . . . . . . . . . 254
15.2.1 Kriterien an den Provider . . . . . . . . . . . . . . . . . . . . 258
15.2.2 Lokalisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
15.2.3 Bereichsabfrage . . . . . . . . . . . . . . . . . . . . . . . . . . 262
15.3 Karten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
15.3.1 MapView im Einsatz . . . . . . . . . . . . . . . . . . . . . . . 268
15.3.2 Auf der Karte zeichnen . . . . . . . . . . . . . . . . . . . . . 271
16 Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.1 2D-Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.1.1 Bitmaps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
16.2 3D-Grafik . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282
16.2.1 Das OpenGL ES API . . . . . . . . . . . . . . . . . . . . . . . 283
16.2.2 Das erste Open GL-Beispiel . . . . . . . . . . . . . . . . . . . 285
16.2.3 Objekteigenschaften . . . . . . . . . . . . . . . . . . . . . . . 295
17 Zugriff auf die Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
17.1 Multimedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
17.1.1 Eine Ressource abspielen . . . . . . . . . . . . . . . . . . . . 302
17.1.2 Eine Datei oder URL abspielen . . . . . . . . . . . . . . . . . 302
17.1.3 Weitere Methoden der Klasse MediaPlayer . . . . . . . . . . 303
17.1.4 Aufnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
17.2 Kamera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
17.2.1 Die Bildvorschau . . . . . . . . . . . . . . . . . . . . . . . . . 306
17.2.2 Ein Bild aufnehmen . . . . . . . . . . . . . . . . . . . . . . . 306
17.3 Sensoren und Aktoren . . . . . . . . . . . . . . . . . . . . . . . . . . 307
17.3.1 Vibrationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
18 SDK 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
18.1 Installation des SDK 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . 315
18.2 Android Virtual Device . . . . . . . . . . . . . . . . . . . . . . . . . . 316
18.3 Unsere Beispiele mit dem SDK 1.5 . . . . . . . . . . . . . . . . . . . 318
18.4 Charakteristische Merkmale des SDK 1.5 . . . . . . . . . . . . . . . 318
18.5 Das AppWidget-API . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
18.5.1 Widgets auf dem Startbildschirm ablegen . . . . . . . . . . . 322
18.5.2 Details eines Widgets . . . . . . . . . . . . . . . . . . . . . . . 322
18.5.3 Ein Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
A Anhang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
A.1 XML Kurzbeschreibung . . . . . . . . . . . . . . . . . . . . . . . . . 333
A.1.1 Syntax . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
A.1.2 Dokumenttyp-Definition . . . . . . . . . . . . . . . . . . . . 336
A.1.3 Namensräume . . . . . . . . . . . . . . . . . . . . . . . . . . 337
A.1.4 XML-Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
A.2 Klassendiagramme der Benutzungsschnittstellen . . . . . . . . . . . 339
Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363