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

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.

Leave a Comment