如何发送现代(API 33、Android 13)富媒体控件通知?

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

我几天来一直在尝试发送像这里这样的富媒体控制通知。我目前正在使用 ExoPlayer 对象来播放音频文件,但如果有必要,我会更改它。

我已经尝试了很多东西,但似乎有些不同。

java android push-notification mediacontroller
1个回答
0
投票

我想通了,混蛋

安卓清单:

    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<uses-permission android:name="android.permission.WAKE_LOCK"/>

你必须像这样创建类 PlaybackService

package yourshittypackage;
import android.content.Intent;

import androidx.annotation.Nullable;
import androidx.media3.common.AudioAttributes;
import androidx.media3.common.C;
import androidx.media3.common.Player;
import androidx.media3.exoplayer.ExoPlayer;
import androidx.media3.session.MediaSession;
import androidx.media3.session.MediaSessionService;

public class PlaybackService extends MediaSessionService {
    private MediaSession mediaSession = null;

// Create your Player and MediaSession in the onCreate lifecycle event
@Override
public void onCreate() {
    super.onCreate();
    ExoPlayer player = new ExoPlayer.Builder(this).setWakeMode(C.WAKE_MODE_LOCAL).setHandleAudioBecomingNoisy(true).setAudioAttributes(AudioAttributes.DEFAULT, true).build();
    mediaSession = new MediaSession.Builder(this, player).build(); ///mal sehen...
}

@Nullable
@Override
public MediaSession onGetSession(MediaSession.ControllerInfo controllerInfo) {
    return mediaSession;
}
// The user dismissed the app from the recent tasks
@Override
public void onTaskRemoved(@Nullable Intent rootIntent) {
    Player player = mediaSession.getPlayer();
    if (!player.getPlayWhenReady()
            || player.getMediaItemCount() == 0
            || player.getPlaybackState() == Player.STATE_ENDED) {
        // Stop the service if not playing, continue playing in the background
        // otherwise.
        stopSelf();
    }
}

// Remember to release the player and media session in onDestroy
@Override
public void onDestroy() {
    mediaSession.getPlayer().release();
    mediaSession.release();
    mediaSession = null;
    super.onDestroy();
}
}

声明 ListenableFuture 控制器Future;

然后在 Oncreate

PlaybackService playbackService = new PlaybackService();
SessionToken sessionToken =
        new SessionToken(this, new ComponentName(this, PlaybackService.class));
controllerFuture =
        new MediaController.Builder(this, sessionToken).buildAsync();
controllerFuture.addListener(() -> {
    // MediaController is available here with controllerFuture.get()
}, MoreExecutors.directExecutor());

播放媒体的示例

controllerFuture.get().addMediaItem(mediaItem);
                controllerFuture.get().prepare();
                controllerFuture.get().play();

并且在这一切之后,richt 通知会自行发送。

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