Broadcast Receiver

Un Broadcast est une technique d’émission de message  ne possède qu’une seule méthode onReceive() Les receivers sont limités : ils ne peuvent pas ouvrir de boite de dialogue par exemple. Le système Android envoie l’intention à tous les BroadCast Receiver abonnées par ordre de priorité (priorité de votre BroadCast dans le fichierAndroidManifest.xml).

Création d’un BroadCast :

On créé un broadcast comme un appel de type  « intent », avec une chaine contenant l’action (le package à lancer), des données optionnelles et un chaine de type category. Comme pour les intents standards, les données sont ajoutées sous la forme d’un couple à l’aide de l’instruction putExtra(). L’ajout d’une catégorie (optionnelle) se fera par l’instruction addCategory().

 Intent intent = new Intent();  
 intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);  
 intent.setAction("com.example.Broadcast");  
 intent.putExtra("HighScore", 1000);  
 sendBroadcast(intent);  

Une autre manière de transférer des données d’une application à une autre : les sync adapter : http://udinic.wordpress.com/2013/07/24/write-your-own-android-sync-adapter/

Exemple

1°) Utilisation via déclaration dans le manifest :

la fonction onReceive sera automatiquement appelé sans instance.

Définissez votre broadcast dans une classe :

 public class classe_broadcast extends BroadcastReceiver {  
   
      public void onReceive(Context context, Intent intent) {  
           //-- action à mener lorsque le BroadCast est activé
      }  
 }  

Placez dans le manifest.xml (avant </application> la déclaration de votre broadcast

<receiver android:name="com.xxxx.nom_du_package.classe_du broadcast">   
  <intent-filter>
      <action android:name="android.provider.Telephony.SMS_RECEIVED" />
  </intent-filter>
</receiver>

Stop et  start, dans la classe principale de votre application :

 public class BroadcastNewSms extends Activity {
  private Button b1;
  private Button b2;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  
   super.onCreate(savedInstanceState);
   //-- Met la priorité la plus importante sur l'événement à BroadCaster
   IntentFilter filter = new IntentFilter( "android.provider.Telephony.SMS_RECEIVED" );
   filter.setPriority( IntentFilter.SYSTEM_HIGH_PRIORITY );
   //-- Traitement des boutons
   b1 = (Button) findViewById(R.id.b1);
   b2 = (Button) findViewById(R.id.b2);
   //-- Ecoute du Bouton Activation du Broadcast
   b1.setOnClickListener(new View.OnClickListener() {  
   @Override  
    public void onClick(View v) {       
       PackageManager pm = Re_editActivity.this.getPackageManager();  
       ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);  
       pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_ENABLED,  
               PackageManager.DONT_KILL_APP);  
       Toast.makeText(getApplicationContext(), "activated", Toast.LENGTH_LONG).show();  
       }  
     });  
 b2.setOnClickListener(new View.OnClickListener() {  
     @Override  
     public void onClick(View v) {  
       PackageManager pm = Re_editActivity.this.getPackageManager();  
       ComponentName componentName = new ComponentName(currentActivity.this, name_of_your_receiver.class);  
       pm.setComponentEnabledSetting(componentName,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,  
               PackageManager.DONT_KILL_APP);  
       Toast.makeText(getApplicationContext(), "cancelled", Toast.LENGTH_LONG).show();  
     }  
   });  
}

 Où :

<Re_editActivity> est le nom de l’activity, currentActivity aussi et name_of your_receiver le nom de la class

L’avantage est que le broadcast peut être désactivé ou activé par une autre application !

Source : http://stackoverflow.com/questions/11289119/enable-and-disable-broadcast-receiver-on-button-click

Exemples :

Broadcast avec alarme :
http://code4reference.com/2012/08/enabling-disabling-broadcast-receiver-during-runtime/

http://www.chupamobile.com/tutorial-android/android-broadcast-receiver-enable-and-disable-during-runtime-185

http://blog.valtech.fr/2010/05/06/detecteur-devenements-sous-android-lapplication-bigbrother/comment-page-1/

 

2°) Déclaration directe dans le code :

MyBroadReceiver myVarBrodcastReceiver= new MyBroadReceiver() ;
registerReceiver(myVarBrodcastReceiver, new IntentFilter("..."))

Il faut appeler l’instance, soit dans l’activité, soit dans un service. Il est donc possible de définir un broadcastReceiver en classe interne pour avoir accès aux attributs et méthode de l’activité.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Articles récents
Commentaires récents
fatima sur Bienvenue !
AdminDroid sur Bienvenue !
fatima sur Bienvenue !
Archives
Catégories
%d blogueurs aiment cette page :