1

Je crée une application de chat simple. Quand je reçois un message, j'ai envoyé un message de diffusion. Comme cela est exécuté à l'intérieur d'un thread démarré par un service, je passe le contexte au thread.LocalBroadcastReceiver ne fonctionne pas à l'intérieur d'un thread

MyConnection est un fil d'extension de classe.

@Override 
public void onCreate() { 
    super.onCreate();  
    connection = new MyConnection(getApplicationContext()); 
} 

donc à l'intérieur du fil quand je reçois un message, je fais ça ...

Intent i = new Intent(); 
i.putExtra("from", message.getFrom()); 
i.putExtra("message", message.getBody()); 
i.setAction(MyService.MESSAGE_RECEIVED);     
_context.sendBroadcast(i); 

_context est le getApplicationContext() je suis passé au constructeur du fil. J'ai le receiver enregistré dans mon fichier manifeste.

Donc, tout cela est mon travail et le récepteur reçoit le message avec succès.

Maintenant, je veux changer cela pour utiliser le LocalBroadcastManager. Donc, ce que je faisais était tout simplement changer le _context.sendBroadcast(i) à

LocalBroadcastManager.getInstance(_context).sendBroadcast(i); 

Cependant, mon BroadcastReceiver ne reçoit aucune des émissions envoyées de cette façon.

Qu'est-ce que je fais mal? Dois-je enregistrer le récepteur d'une manière différente dans Manifest pour recevoir des émissions locales? Y a-t-il d'autres étapes requises pour le faire fonctionner?

+0

pouvez-vous essayer de cette façon? http://stackoverflow.com/a/12270926/1218762, je ne suis pas sûr de ce –

+0

cela fonctionne pour moi: http://stackoverflow.com/a/16832647/1218762 –

Répondre

1

Avez-vous enregistré votre récepteur de diffusion avec registerReceiver ou dans le manifeste? Au lieu de passer getApplicationContext(), passez le this, car Service étend également Context.

+0

Ainsi, peu importe le contexte Je passe? Je pensais que je devais utiliser le même contexte pour l'envoi et la réception. C'est pourquoi j'ai utilisé 'getApplicationContext'. –

+0

Non, cela n'a pas d'importance tant que vous transmettez la même intention pour la diffusion. En effet, une application peut envoyer une diffusion et une autre la recevoir, les contextes sont alors évidemment différents. –

Questions connexes