Android

Grundlagen und Programmierung

Bei der Erstellung des Buchs sind uns leider doch ein paar Fehler unterlaufen. Damit dies nicht beim Leser zur Verwirrung führt, haben wir hier die uns bekannten Fehler aufgelistet. Wir danken unseren Lesern herzlich für die Hinweise. Wenn Sie selber Fehler finden, würden wir uns freuen, wenn Sie uns diese melden:

Kontakt:
Diese E-Mail-Adresse ist gegen Spambots geschützt! Sie müssen JavaScript aktivieren, damit Sie sie sehen können.

Listing 1.5 auf Seite 8

Spinner s1 = (Spinner)findViewById(R.id.Stauursache);
muss heißen
Spinner s1 = (Spinner)findViewById(R.id.stauUrsachen);

Listing 1.8 auf Seite 11

Die hier abgedruckte Codezeile ist veraltet. An dritter Position muss ein weiterer Parameter eingefügt werden. Richtig muss es heißen:
menu.add(0, ABSCHICKEN_ID, Menu.NONE, "Melden");

Seite 43 Zeile 3-4

Hier sind zwei Beispiele für Ressourcen-Schlüssel angegeben. Wie in Listing 5.3 richtig zu sehen ist, sollte hier das @-Zeichen mit angegeben werden:
@android:style/Theme.Dialog
@string/startseite_anzeigen_titel

Seite 94 Kap. 7.2, 2. Absatz

In dem Satz
"Als ersten Parameter übergeben wir dem Konstruktor des Intent den Android-Context der Zielkomponente."
handelt es sich nicht um den Context der Zielkomponente, sondern schlicht um den Context der Anwendung. Diesen erhält man mittels der Methode Activity::getApplicationContext(). Die Verwendung von this ist hier auch möglich, erzwingt aber einen Downcast, da this die Activity ist. Daher sollte das Codebeispiel besser wie folgt lauten:
Intent i = new Intent(getApplicationContext(), RouteFestlegen.class);
Der Satz darunter muss lauten: "Als ersten Parameter übergeben wir dem Konstruktor des Intent den Application-Context."

Seite 97 Zeile 5

In der dem Text zugrunde liegenden LaTex-Datei ist ein Fehler. Dadurch sind doppelte Anführungszeichen gedruckt worden. Statt
Uri.parse(""tel:(0228)1234567""))
muss es
Uri.parse("tel:(0228)1234567"))

Seite 100, Listing "Intent-Filter"

Der data-Tag des Intent-Filters unten auf der Seite ist nicht korrekt. Das Attribut "android:path" ist wirkungslos, da kein host-Attribut gesetzt wurde (siehe Erklärung zu path auf Seite 97). Das Filter-Konstrukt erzeugt zwar keine Fehlermeldung, aber der Filter sollte nur auf bestimmte Intents mit einem bestimmten host-Attribut lauschen. Richtig muss es daher lauten:
<data android:host="de.androidbuch"
        android:scheme="content" />

Seite 111, 4. Absatz

Fehler in der Referenzierung der Stellen im Quellcode. Der erste Satz im vierten Absatz muss lauten: "..., dass es die Methode getGpsData zweimal gibt (6a und 6b).

Seite 114, Zeile 6

Der Satz "Man muss einen solchen Service nicht stoppen oder die Verbindung beenden." ist so falsch. Auch eine Verbindung zu einem Local Service muss mittels der Methode unbindService beendet werden, bevor die Activity beendet wird, die die Verbindung zu dem Service aufgebaut hat. Richtig ist: "Man muss einen solchen Service nicht stoppen."

Seite 135 Listing 8.16

Im Listing wird ein Lock auf getClass() ausgeführt. Dies führt zu einer IllegalMonitorException. Ein Lock auf "this" löst das Problem. Somit ist in den Methoden run() und beginneAufgabe() die Zeile
synchronized(getClass()) {
durch
synchronized(this) {
zu ersetzen. Der Aufruf der Methode wait() muss in der Praxis natürlich mit einem Try-Catch-Block geklammert werden. Diesen haben wir aus Gründen der Übersichtlichkeit weggelassen.

Seite 152 Listing 9.5

Am Ende des Listings findet man die Codezeile
nm.cancel(nNr);
Vorher wird aber die Id der Notification aus dem Intent geholt und mit "notificationNr" bezeichnet. Daher muss die Zeile wie folgt lauten:
nm.cancel(notificationNr);
Im darauf folgenden Text ist ebenfalls von der Id "nNr" die Rede. Auch hier sollte "notificationNr" stehen.

Seite 247, Listing 14.3

Beim Compilieren von Listing 14.3 würde es eine Fehlermeldung vom Compiler geben. Wir haben aus Gründen der Übersichtlichkeit im Listing nur die Methode onServiceConnected(ComponentName className, IBinder binder) (siehe Codestelle (3) auf Seite 247) abgedruckt. Damit das Listing compilierbar wird, muss hier noch die Methode public void onServiceDisconnected(ComponentName className) eingefügt werden. Da es sich um einen Local Service handelt, wird diese Methode jedoch nie aufgerufen, selbst wenn man mittels des Aufrufs der Methode unbindService die Verbindung zum Local Service trennt. Der Grund ist, dass Android den Aufruf dieser Methode einspart, da ein Local Service beendet wird, sobald der Prozess, der ihn gestartet hat, beendet wird (siehe Seite 114 oben).

Seite 263

Hier ist eine Indexmarke aus dem LaTex-Quellcode des Buchs nicht umgesetzt worden. Richtig muss es heißen:
> geo fix <longitude> <latitude>