How can I remove notification buttons in Android - media3 Exoplayer

254 Views Asked by At

How can i get rid of the play / pause button, next button and previous button button from the notifications? Removing the whole window from the notifications would be ok too. I make use of exoplayer in combination with mediasession.

My code looks like this

import androidx.media3.common.MediaItem;
import androidx.media3.common.Player;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.session.MediaSession;
import androidx.media3.session.MediaSessionService;

public class MyExoPlayerService extends MediaSessionService {

private ExoPlayer myExoPlayer;
private MediaSession mediaSession;

@Override
public void onCreate() {
    Log.d(Const.TAG, "Create media session service");
    super.onCreate();
    myExoPlayer = new ExoPlayer.Builder(this)
            .build();
    
    if(mediaSession.getPlayer()==null) {
        Log.d(Const.TAG, "Player is null");
    }
}

@Override
public void onDestroy() {
    Log.d(Const.TAG, "Destroy media session service");
    release();
    super.onDestroy();
}

public void setDisc(Uri uri) {
    // Build the media item.
    MediaItem mediaItem = MediaItem.fromUri(uri);

    // Set the media item to be played.
    mediaSession.getPlayer().setMediaItem(mediaItem);

    //Set repeat mode to loop
    mediaSession.getPlayer().setRepeatMode(Player.REPEAT_MODE_ALL);

    // Prepare the player.
    mediaSession.getPlayer().prepare();

    // Start the playback.
    mediaSession.getPlayer().setPlayWhenReady(true);
}

public void release() {
    Log.d(Const.TAG, "Release media session service");
    if(myExoPlayer!=null){
        myExoPlayer.release();
    }
    if(mediaSession!=null) {
        if(mediaSession.getPlayer()!=null) {
            mediaSession.getPlayer().release();
        }
        mediaSession.release();
        mediaSession = null;
    }
}

public void pause() {
    if(myExoPlayer!=null){
        mediaSession.getPlayer().setPlayWhenReady(false);
    }
}

public void start() {
    if(myExoPlayer!=null){
        mediaSession.getPlayer().setPlayWhenReady(true);
    }
}

public boolean isPlaying() {
    return mediaSession.getPlayer().getPlayWhenReady();
}

@Override
public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) {
    // This example always accepts the connection request
    return mediaSession;
}

}

and that is how I create the exoplayer service:

private void prepareExoPlayerService() {

    // Set flag
    mediaControllerIsPrepared = new AtomicBoolean();
    mediaControllerIsPrepared.set(false);

    // Build session token
    SessionToken sessionToken =
            new SessionToken(this, new ComponentName(this, MyExoPlayerService.class));

    // Build media controller
    mediaControllerFuture =
            new MediaController.Builder(this, sessionToken).buildAsync();
    mediaControllerFuture.addListener(() -> {
        // Call controllerFuture.get() to retrieve the MediaController.
        // MediaController implements the Player interface, so it can be
        // attached to the PlayerView UI component.
        //playerView.setPlayer(controllerFuture.get());
        mediaControllerIsPrepared.set(true);
    }, MoreExecutors.directExecutor());

}
1

There are 1 best solutions below

0
On

Found a temporary workaround. Temporary because the method call is deprecated.

    @Override
public void onUpdateNotification(MediaSession session) {
    // do nothing
}

I added that to my class MediaSessionService.