Ramanjot Kaur
Posted on February 22, 2022
In this post, we will describe you how to play Exoplayer media in the background and control it through Android notifications.
Google is the developer of Exoplayer. YouTube and Google Play Movies used it previously, and it's open-source. This is an application-level media player for Android. It provides a replacement for Android's MediaPlayer API for playing audio and video.
In the screenshot above, you can see the stream is playing and you can control it from Android Notifications.
You can accomplish this by following these steps:
- Use Exoplayer PlayerNotificationManager instance. PlayerNotificationManager is the main class that encapsulates functionality such as starting, controlling, attaching, and untying the player from Android notifications.
PlayerNotificationManager.Builder playerNotificationManagerBuilder = new PlayerNotificationManager.Builder(this, ID, CHANNEL_ID);
playerNotificationManagerBuilder.setMediaDescriptionAdapter(mediaDescriptorInstance);
PlayerNotificationManager playerNotificationManager = playerNotificationManagerBuilder.build();
- The next step is to use
PlayerNotificationManager.MediaDescriptionAdapter
to provide descriptive data for the current playing media item, including the media title, subtext, and thumbnail/icon.
PlayerNotificationManager.MediaDescriptionAdapter mediaDescriptorInstance = new PlayerNotificationManager.MediaDescriptionAdapter() {
@Override
public CharSequence getCurrentContentTitle(Player player) {
return "<Media Main Title>";
}
@Nullable
@Override
public PendingIntent createCurrentContentIntent(Player player) {
return null;
}
@Override
public CharSequence getCurrentContentText(Player player) {
return "<Media sub-Title>";
}
@Nullable
@Override
public Bitmap getCurrentLargeIcon(Player player, PlayerNotificationManager.BitmapCallback callback) {
// Icon to display
return bitmap;
}
};
- Attach the playerNotificationManager to the player by passing the player instance
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(renderersFactory, trackSelector);
playerNotificationManager.setPlayer(player)
- Pass null to detach and free the player.
playerNotificationManager.setPlayer(null)
PlayerNotificationManager is typically instantiated in the onCreate method of an activity or fragment. Like PlayerActivity
public class PlayerActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
PlayerNotificationManager.Builder playerNotificationManagerBuilder = new PlayerNotificationManager.Builder(this, ID, CHANNEL_ID);
playerNotificationManagerBuilder.setMediaDescriptionAdapter(mediaDescriptorInstance);
PlayerNotificationManager playerNotificationManager = playerNotificationManagerBuilder.build();
}
When an application launches PlayerActivity, the Android status bar must show player notifications and player controls.
Posted on February 22, 2022
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.