09.02.2017 Views

creez-des-applications-pour-android

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5.2 Les services<br />

au service. Alors, comment créer cette interface ? Tout d’abord, il faut savoir que le IBinder qui<br />

sera donné à onServiceConnected(ComponentName, IBinder) est envoyé par la méthode<br />

de callback IBinder onBind(Intent intent) dans Service. Maintenant, il suffit de créer un<br />

IBinder. Nous allons voir la méthode la plus simple, qui consiste à permettre à l’IBinder de<br />

renvoyer directement le Service de manière à pouvoir effectuer <strong>des</strong> comman<strong>des</strong> <strong>des</strong>sus.<br />

public class MonService extends Service {<br />

// Attribut de type IBinder<br />

private final IBinder mBinder = new MonBinder();<br />

// Le Binder est représenté par une classe interne<br />

public class MonBinder extends Binder {<br />

// Le Binder possède une méthode <strong>pour</strong> renvoyer le Service<br />

MonService getService() {<br />

return MonService.this ;<br />

}<br />

}<br />

}<br />

@Override<br />

public IBinder onBind(Intent intent) {<br />

return mBinder;<br />

}<br />

Le service sera créé s’il n’était pas déjà lancé (appel à onCreate() donc), mais ne passera pas par<br />

onStartCommand().<br />

Pour qu’un client puisse se détacher d’un service, il peut utiliser la méthode void unbindService(ServiceCon<br />

conn) de Context, avec conn l’interface de connexion fournie précédemment à bindService().<br />

Ainsi, voici une implémentation typique d’un service distant :<br />

// Retient l'état de la connexion avec le service<br />

private boolean mBound = false ;<br />

// Le service en lui-même<br />

private MonService mService;<br />

// Interface de connexion au service<br />

private ServiceConnection mConnexion = new ServiceConnection() {<br />

// Se déclenche quand l'activité se connecte au service<br />

public void onServiceConnected(ComponentName className, IBinder service) {<br />

mService = ((MonService.MonBinder)service).getService();<br />

}<br />

// Se déclenche dès que le service est déconnecté<br />

public void onServiceDisconnected(ComponentName className) {<br />

mService = null ;<br />

}<br />

} ;<br />

@Override<br />

protected void onStart() {<br />

351

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!