Le meilleur équivalent que j'ai trouvé est LocalBroadcastManager qui fait partie de l' Android Support Package.
À partir de la LocalBroadcastManager de la documentation:
De l'aide pour vous inscrire et envoyer des diffusions des Intentions aux objets locaux au sein de votre processus. C'est a un certain nombre d'avantages par rapport à l'envoi de diffusion mondiale avec sendBroadcast(Intention):
- Vous savez que les données sont de radiodiffusion ne laissera pas votre application, afin de ne pas besoin de s'inquiéter à propos de la fuite de données privées.
- Il n'est pas possible pour d'autres applications pour envoyer ces émissions à votre application, donc vous n'avez pas besoin de s'inquiéter d'avoir des trous de sécurité qu'ils peuvent exploiter.
- Il est plus efficace que l'envoi d'une diffusion mondiale, à travers le système.
Lors de l'utilisation de cela, vous pouvez dire que l' Intent
est équivalent à une NSNotification
. Voici un exemple:
ReceiverActivity.java
Une activité que les montres pour les notifications pour l'événement nommé "custom-event-name"
.
@Override
public void onCreate(Bundle savedInstanceState) {
...
// Register to receive messages.
// This is just like [[NSNotificationCenter defaultCenter] addObserver:...]
// We are registering an observer (mMessageReceiver) to receive Intents
// with actions named "custom-event-name".
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("custom-event-name"));
}
// Our handler for received Intents. This will be called whenever an Intent
// with an action named "custom-event-name" is broadcasted.
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
String message = intent.getStringExtra("message");
Log.d("receiver", "Got message: " + message);
}
};
@Override
protected void onDestroy() {
// Unregister since the activity is about to be closed.
// This is somewhat like [[NSNotificationCenter defaultCenter] removeObserver:name:object:]
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onDestroy();
}
SenderActivity.java
La deuxième activité qui envoie/émissions de notifications.
@Override
public void onCreate(Bundle savedInstanceState) {
...
// Every time a button is clicked, we want to broadcast a notification.
findViewById(R.id.button_send).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sendMessage();
}
});
}
// Send an Intent with an action named "custom-event-name". The Intent sent should
// be received by the ReceiverActivity.
private void sendMessage() {
Log.d("sender", "Broadcasting message");
Intent intent = new Intent("custom-event-name");
// You can also include some extra data.
intent.putExtra("message", "This is my message!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
Avec le code ci-dessus, chaque fois que le bouton R.id.button_send
est cliqué, l'Intention est diffusé et est reçu par mMessageReceiver
en ReceiverActivity
.
La sortie de débogage devrait ressembler à ceci:
01-16 10:35:42.413: D/sender(356): Broadcasting message
01-16 10:35:42.421: D/receiver(356): Got message: This is my message!