Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using a broadcast intent/broadcast receiver to send messages from a service to an activity

So I understand (I think) about broadcast intents and receiving messages to them.

So now, my problem/what I can't work out is how to send a message from the onReceive method of a receiver to an activity. Lets say I have a receiver as such:

public class ReceiveMessages extends BroadcastReceiver  { @Override    public void onReceive(Context context, Intent intent)     {            String action = intent.getAction();        if(action.equalsIgnoreCase(TheService.DOWNLOADED)){                // send message to activity        }    } } 

How would I send a message to an activity?

Would I have to instantiate the receiver in the activity I want to send messages to and monitor it somehow? Or what? I understand the concept, but not really the application.

Any help would be absolutely amazing, thank you.

Tom

like image 996
Thomas Clayson Avatar asked Sep 01 '11 21:09

Thomas Clayson


People also ask

How can we transfer data from broadcast receiver to activity?

Intent intent = getIntent(); String message = intent. getStringExtra("message"); And then you will use message as you need. If you simply want the ReceiveText activity to show the message as a dialog, declare <activity android:theme="@android:style/Theme.

How does broadcast receiver Intent work?

Android BroadcastReceiver is a dormant component of android that listens to system-wide broadcast events or intents. When any of these events occur it brings the application into action by either creating a status bar notification or performing a task.


1 Answers

EDITED Corrected code examples for registering/unregistering the BroadcastReceiver and also removed manifest declaration.

Define ReceiveMessages as an inner class within the Activity which needs to listen for messages from the Service.

Then, declare class variables such as...

ReceiveMessages myReceiver = null; Boolean myReceiverIsRegistered = false; 

In onCreate() use myReceiver = new ReceiveMessages();

Then in onResume()...

if (!myReceiverIsRegistered) {     registerReceiver(myReceiver, new IntentFilter("com.mycompany.myapp.SOME_MESSAGE"));     myReceiverIsRegistered = true; } 

...and in onPause()...

if (myReceiverIsRegistered) {     unregisterReceiver(myReceiver);     myReceiverIsRegistered = false; } 

In the Service create and broadcast the Intent...

Intent i = new Intent("com.mycompany.myapp.SOME_MESSAGE"); sendBroadcast(i); 

And that's about it. Make the 'action' unique to your package / app, i.e., com.mycompany... as in my example. This helps avoiding a situation where other apps or system components might attempt to process it.

like image 194
Squonk Avatar answered Oct 13 '22 13:10

Squonk