Broadcaster
Les broadcaster sont les diffuseurs d'évènements/messages via des intentions (intentions que l'on nommera des broadcast intents pour les différentier des intentions plus classiques).
Les messages ainsi diffusés pourront être réceptionnés par plusieurs applications, les applications qui se seront abonnées à ces broadcasts (diffusions).
Les broadcast intents
sont essentiellement utilisées par Android pour indiquer des évènements
dans le système.
Diffuser un évènement ou message
Il est possible de diffuser un évènement ou message à toutes les applications abonnées. Pour cela, il suffit de créer une intention, puis de la diffuser en utilisant sendBroadcast().
Par convention, le nom de l'évènement que vous allez diffuser se construit de la même manière qu'un package JAVA:
Par exemple : fr.free.supertos.MonEvenementAMoi
Il sera ensuite possible de passer des datas, extra datas.
Voici un exemple:
Intent intent = new Intent("fr.free.supertos.MonEvenementAMoi");
intent.putExtra(PARAMETRE1, param1);
intent.putExtra(PARAMETRE2, param2);
sendBroadcast(intent);
Comme vous pouvez le voir, vous ne lancez plus une activité, mais diffusez un broadcast intent...
Diffusion restreinte d'un évènement ou message
Restreindre:
Il s'agit d'indiquer une permission lors de la diffusion, seules les broadcast receivers ayant positionnés cette permission pourront recevoir ce message ou évènement:
String requiredPermission = "fr.free.supertos.MON_BROADCAST_PERMISSION";
sendBroadcast(Intent intent, String receiverPermission)
Diffusion ordonnée et restreinte d'un évènement ou message
Il s'agit d'ordonnée la diffusion d'un message aux applications abonnées et ayant les droits de traiter ce mesasge.
Ordonnée:
La diffusion se fait application par application et non en parallèle comme avec le sendBroadcast(). La diffusion pourra ainsi être interrompue par une application si elle juge inutile de poursuivre cette diffusion. L'ordre des applications qui traiteront ce message dépendra du choix d'Android qui respectera un niveau de priorité à la réception donné aux broadcast receivers. Le plus prioritaire recevant le message avant le moins prioritaire...
Restreindre:
Il s'agit d'indiquer une permission lors de la diffusion, seules les broadcast receivers ayant positionnés cette permission pourront recevoir ce message ou évènement:
String requiredPermission = "fr.free.supertos.MON_BROADCAST_PERMISSION";
Diffusion:
Pour envoyer l'évènement, il faudra utiliser:
sendOrderedBroadcast(intent, requiredPermission);
Ainsi, seules les broadcast receivers avec cette permission définie pourront recevoir ces intentions.
Il est possible
qu'un évènement ne soit pas traité, et qu'une erreur remonte
à la console indiquant que l'une des applications (émetteur ou
récepteur) n'a pas les droits. Pour résoudre ce problème
voir ici afin d'avoir un exemple sur le noeud
<permissions>
Diffusion persistente
Cas particulier de broadcaster où les valeurs d'une intention persistent dans le temps permettant à des nouveaux receiver de recevoir immédiatement le message, bien que le broadcast soit terminé depuis longtemps.