Java Reference
In-Depth Information
<service android:name=".MyBoundService" android:process=":service">
<intent-filter>
<action
android:name="javacomp.android.bindservice.BINDSERVICE"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</service>
1 6 .9 .4 Nutzung eines gebundenen Service
Ähnlich wie bei einem ungebundenen Service muss man zur Nutzung eines gebundenen
Service ein Intent-Objekt erzeugen und eine entsprechende Methode aufrufen, der dieses
Intent-Objekt übergeben wird. Für einen gebundenen Service heißt die Methode bindSer-
vice statt startService. Die Methode bindService liefert aber keine Referenz auf das eigent-
liche Dienstobjekt (in unserem Fall den Zähler) zurück, sondern man muss in bindService
als zweites Argument nach dem Intent ein Objekt einer Klasse angeben, welche die Schnitt-
stelle ServiceConnection mit den Methoden onServiceConnected und onServiceDisconnec-
ted implementiert. Im Folgenden gehen Sie bitte davon aus, dass serviceConn auf ein Objekt
einer solchen SerivceConnection implementierenden Klasse zeigt. Dann können wir den
Kontakt zu unserem gebundenen Service wie folgt herstellen:
Intent intent =
new Intent("javacomp.android.bindservice.BINDSERVICE");
bindService(intent, serviceConn, Context.BIND_AUTO_CREATE);
Wie zu sehen ist, hat bindService noch ein drittes Argument. Mit diesem wird in unserem
Fall angegeben, dass beim Binden der Dienst automatisch erzeugt werden soll, falls er noch
nicht existiert.
Falls das Binden erfolgreich war, was durch den Rückgabewert true von bindService ange-
zeigt wird, wird nach der Rückkehr aus bindService die Methode onServiceConnected auf
dem als zweitem Argument angegebenen Objekt aufgerufen.
Zum besseren Verständnis unserer Beispielimplementierung von ServiceConnection sollte
man wissen, dass es auch zu dieser Anwendung eine Activity-Klasse namens ServiceActi-
vity gibt, die eine Methode setCounter besitzt (die Klasse ServiceActivity wird zum Platz-
sparen nicht abgedruckt, kann aber von der Web-Seite zum Buch heruntergeladen werden).
Durch setCounter wird ein Counter-Objekt gesetzt, das beim Drücken auf den Button „Erhö-
hen“ bzw. „Zurücksetzen“ verwendet wird, um den Zähler zu erhöhen bzw. zurückzusetzen.
A u ß erdem zeigt die Activity an, dass der Dienst gebunden ist und verwendet werden kann.
Wird als Argument von setCounter null angegeben, dann wird eine Meldung angezeigt,
dass der Dienst nicht zur Verfügung steht. Die Klasse MyServiceConnection (s. Listing
16.11) implementiert die Schnittstelle ServiceConnection. Die Methode onServiceConnec-
ted ist die entscheidende Methode. Hier wird das Dienstobjekt als zweiter Parameter über-
geben. Durch Anwendung der statischen Methode asInterface der inneren Klasse Counter.
Stub erhält man ein Objekt des Typs Counter zurück, mit dem man auf den Zähler zugreifen
kann. Im einfachsten Fall, wenn nämlich der Dienst und die Activity, die den Dienst benutzt,
im selben Prozess laufen, ist der Typ des Objekts, das von asInterface zurückgegeben wird,
tatsächlich CounterImpl. Man erhält also eine echte Referenz auf das in der Methode onBind
 
Search WWH ::




Custom Search