如何删除 Android 中的通知按钮 - media3 Exoplayer

问题描述 投票:0回答:1

如何从通知中删除播放/暂停按钮、下一个按钮和上一个按钮?从通知中删除整个窗口也可以。我将 exoplayer 与 mediasession 结合使用。

我的代码看起来像这样

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;
}

}

这就是我创建 exoplayer 服务的方式:

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());

}
android exoplayer2.x android-media3
1个回答
0
投票

找到了临时解决方法。临时的,因为方法调用已被弃用。

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

我将其添加到我的 MediaSessionService 类中。

© www.soinside.com 2019 - 2024. All rights reserved.