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/
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/
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é.
Votre commentaire