475 votes

Comment utiliser LocalBroadcastManager ?

quelqu'un peut-il me dire comment utiliser/localiser LocalBroadcastManager comme décrit dans google docs et le Service de radiodiffusion doc?

j'ai essayé de chercher sur google, mais ya pas de code pour commencer?

les documents disent que je devrais l'utiliser si je veux faire la diffusion en interne dans mon application, mais je ne sais pas où regarder pour cette

toute aide/commentaire?

Mise à jour: je sais comment les utiliser Diffuse, mais ne savent pas comment obtenir LocalBroadcastManager disponibles dans mon projet.

881voto

Shiki Points 6342

Je vais répondre à cela de toute façon. Juste au cas où quelqu'un en a besoin.

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.
  // 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.
  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! 

134voto

SohailAziz Points 1873

Je serais plutôt du genre à répondre de manière exhaustive.

  1. LocalbroadcastManager inclus dans android 3.0 et au-dessus, alors vous avez pour utiliser la bibliothèque de prise en charge v4 pour les versions anciennes. voir les instructions ici

  2. Créer un récepteur de radiodiffusion:

    private BroadcastReceiver onNotice= new BroadcastReceiver() {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            // intent can contain anydata
            Log.d("sohail","onReceive called");
            tv.setText("Broadcast received !");
    
        }
    };
    
  3. Inscrivez votre récepteur dans onResume d'activité comme:

    protected void onResume() {
            super.onResume();
    
            IntentFilter iff= new IntentFilter(MyIntentService.ACTION);
            LocalBroadcastManager.getInstance(this).registerReceiver(onNotice, iff);
        }
    
    //MyIntentService.ACTION is just a public static string defined in MyIntentService.
    
  4. annuler l'inscription d'un récepteur dans onPause:

    protected void onPause() {
      super.onPause();
      LocalBroadcastManager.getInstance(this).unregisterReceiver(onNotice);
    }
    
  5. Pas à chaque fois qu'un localbroadcast est envoyé à partir d'applications de l'activité ou service, onReceive de onNotice seront appelés :).

Edit: Vous pouvez lire tutoriel complet ici LocalBroadcastManager: Intra application de la transmission de message

27voto

waqaslam Points 31012

Je l’ai fixé :

Finalement, j’ai dû ajouter la bibliothèque de compatibilité par clic droit sur mon projet et en sélectionnant Outils Android-> ajouter la bibliothèque de compatibilité. Une fois son ajouté, j’ai été en mesure d’utiliser la classe LocalBroadcastManager .

2voto

nindalf Points 153

Un exemple d'une Activité et d'un Service de la mise en œuvre d'un LocalBroadcastManager peut être trouvé dans le développement de docs. Personnellement, j'ai trouvé très utile.

EDIT: Le lien a depuis été retirée du site, mais les données sont les suivantes: https://github.com/carrot-garden/android_maven-android-plugin-samples/blob/master/support4demos/src/com/example/android/supportv4/content/LocalServiceBroadcaster.java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X