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.

4 Vers <strong>des</strong> <strong>applications</strong> plus complexes<br />

addFlags(int flags).<br />

Il existe trois flags principaux :<br />

— FLAG_ACTIVITY_NEW_TASK permet de lancer l’activité dans une nouvelle tâche, sauf si<br />

l’activité existe déjà dans une tâche. C’est l’équivalent du mode singleTask.<br />

— FLAG_ACTIVITY_SINGLE_TOP est un équivalent de singleTop. On lancera l’activité dans<br />

une nouvelle tâche, quelques soient les circonstances.<br />

— FLAG_ACTIVITY_CLEAR_TOP permet de faire en sorte que, si l’activité est déjà lancée dans<br />

la tâche actuelle, alors au lieu de lancer une nouvelle instance de cette activité toutes les<br />

autres activités qui se trouvent au-<strong>des</strong>sus d’elle seront fermées et l’intent sera délivré<br />

à l’activité (souvent utilisé avec FLAG_ACTIVITY_NEW_TASK). Quand on utilise ces deux<br />

flags ensemble, ils permettent de localiser une activité qui existait déjà dans une autre<br />

tâche et de la mettre dans une position où elle <strong>pour</strong>ra répondre à l’intent.<br />

4.2.6 Pour aller plus loin : diffuser <strong>des</strong> intents<br />

On a vu avec les intents comment dire « Je veux que vous traitiez cela, alors que quelqu’un le fasse<br />

<strong>pour</strong> moi s’il vous plaît ». Ici on va voir comment dire « Cet évènement vient de se dérouler, je<br />

préviens juste, si cela intéresse quelqu’un ». C’est donc la différence entre « Je viens de recevoir<br />

un SMS, je cherche un composant qui <strong>pour</strong>ra permettre à l’utilisateur de lui répondre » et « Je<br />

viens de recevoir un SMS, ça intéresse une application de le gérer ? ». Il s’agit ici uniquement de<br />

notifications, pas de deman<strong>des</strong>. Concrètement, le mécanisme normal <strong>des</strong> intents est visible <strong>pour</strong><br />

l’utilisateur, alors que celui que nous allons étudier est totalement transparent <strong>pour</strong> lui.<br />

Nous utiliserons toujours <strong>des</strong> intents, sauf qu’ils seront anonymes et diffusés à tout le système. Ce<br />

type d’intent est très utilisé au niveau du système <strong>pour</strong> transmettre <strong>des</strong> informations, comme par<br />

exemple l’état de la batterie ou du réseau. Ces intents particuliers s’appellent <strong>des</strong> broadcast intents.<br />

On utilise encore une fois un système de filtrage <strong>pour</strong> déterminer qui peut recevoir l’intent, mais<br />

c’est la façon dont nous allons recevoir les messages qui est un peu spéciale.<br />

La création <strong>des</strong> broadcast intents est similaire à celle <strong>des</strong> intents classiques, sauf que vous allez<br />

les envoyer avec la méthode void sendBroadcast(Intent intent). De cette manière,<br />

l’intent ne sera reçu que par les broadcast receivers, qui sont <strong>des</strong> classes qui dérivent de la classe<br />

BroadcastReceiver. De plus, quand vous allez déclarer ce composant dans votre Manifest, il<br />

faudra que vous annonciez qu’il s’agit d’un broadcast receiver :<br />

<br />

<br />

<br />

<br />

<br />

Il vous faudra alors redéfinir la méthode de callback void onReceive (Context context,<br />

Intent intent) qui est lancée dès qu’on reçoit un broadcast intent. C’est dans cette classe<br />

qu’on gérera le message reçu.<br />

Par exemple, si j’ai un intent qui transmet à tout le système le nom de l’utilisateur :<br />

public class CoucouReceiver extends BroadcastReceiver {<br />

private static final String NOM_USER = "sdz.chapitreTrois.intent.extra.NOM" ;<br />

272

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

Saved successfully!

Ooh no, something went wrong!