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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

Articles récents
Commentaires récents
fatima dans Bienvenue !
AdminDroid dans Bienvenue !
fatima dans Bienvenue !
Archives
Catégories