Search code examples
javaandroidservicebroadcastreceiver

How to update activity UI when app is in background/closed


I have a service which controls my mediaplayer object and when i close my app, a notification is still shown to control playback.

Now when a song is done playing i want update the UI in my activity and i did this with a broadcastreceiver, but this only works when my app is visible and not in the background/closed. (unregistered broadcastreceiver in onPause)

But how do i keep listening for these events when my application is not visible and when the user opens my application again it has the updated UI (new song).

Service

@Override
public void onCompletion(MediaPlayer mp) {
    Log.d(TAG, "OnCompletion called!");

    Intent broadCastReceiverIntentUpdateSong = new Intent(Constants.ACTIONS.BROADCAST_UPDATE_SONG);
    sendBroadcast(broadCastReceiverIntentUpdateSong);

}

Solution

  • When your app starts, it should ask the Service for the current state of the player and show that.

    While the app is running and in the foreground, it can listen for the broadcast events and update the UI (or its own internal state) accordingly.

    When your app goes to the background, it doesn't need to do anything. When it comes again to the foreground (in onResume()) it can again ask the Servicefor the current state of the player.

    You can have the Activity bind to the Service and use AIDL to get the current state OR you can just call startService() with an Intent that contains an ACTION or an EXTRA that indicates that you want to know the current state, and the Service can ract to that by sending a broadcast Intent containing the current state, which your Activity can listen for.