I would like to, on receive of a GCM, display a Popup on my current Activity if my app is active.
I wanted to access my current activity in GcmIntentService but I do
I have something like this:
In your GCM broadcast receiver
Intent intent = new Intent(NOTIFICATION_ACTION);
intent.putExtra(EXTRA_PARAMETER, "something you want to pass as an extra");
context.sendBroadcast(intent);
In your BaseActivity (an Activity that is extended by all the activities that you want to show the pop up)
private BroadcastReceiver notificationBroadcastReceiver = new NotificationBroadcastReceiver();
@Override
protected void onStart() {
super.onStart();
IntentFilter intentFilter = new IntentFilter(NOTIFICATION_ACTION);
registerReceiver(notificationBroadcastReceiver, intentFilter);
}
@Override
protected void onStop() {
super.onStop();
unregisterReceiver(notificationBroadcastReceiver);
}
private class NotificationBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Show popup
}
}
NOTIFICATION_ACTION is a constant you should define somewhere
Well, you can use LocalBroadcast
. See LocalBroadcast Manager.
For how to implement is, there is a great example on how to use LocalBroadcastManager?.
LocalBroadcast Manager is a helper to register for and send broadcasts of Intents to local objects within your process. The data you are broadcasting won't leave your app, so don't need to worry about leaking private data.`
Your activity registers for this local broadcast. From the service you send a LocalBroadcast
from within the onMessage
(saying that hey, I received a message. Show it activity). Then inside your Activity
you can listen to the broadcast. This way if the activity is in the forefront/is active, it will receive the broadcast otherwise it won't. So, whenever you receive that local broadcast, you may do the desired action if activity is open.
If you want to do for the whole app, then you can make all your activities extend an abstract activity. And inside this abstract activity class you can register it for this 'LocalBroadcast'. Other way is to register for LocalBroadcast inside all your activities (but then you'll have to manage how you'll show the message only once).
Hope it helps you.