GCM IntentService how to display a pop up on notification receive

前端 未结 2 945
旧巷少年郎
旧巷少年郎 2021-01-15 08:09

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

相关标签:
2条回答
  • 2021-01-15 08:19

    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

    0 讨论(0)
  • 2021-01-15 08:26

    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.

    0 讨论(0)
提交回复
热议问题