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
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With