1.首先,我们需要在应用程序的build.gradle文件中引入支持AndroidX的Media库。我们可以使用以下依赖关系:
dependencies { implementation 'androidx.media:media:1.3.0' }
2.创建一个服务来处理音频播放,该服务将负责更新媒体通知。以下是一个示例:
public class AudioPlayerService extends Service implements AudioManager.OnAudioFocusChangeListener { private MediaSessionCompat mMediaSession; private NotificationManagerCompat mNotificationManager;
// ...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// ...
// 创建一个新的MediaSessionCompat对象。
mMediaSession = new MediaSessionCompat(this, "AudioPlayerService");
mMediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS
| MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
// 设置媒体会话的回调。
mMediaSession.setCallback(new MediaSessionCallback());
// 启用媒体会话。
mMediaSession.setActive(true);
// 创建一个新的MediaStyle通知。
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, CHANNEL_ID)
// 设置标题和标题
.setContentTitle("My Audio Player Service")
.setContentText("Playing audio in background")
// 设置媒体样式。
.setStyle(new androidx.media.app.NotificationCompat.MediaStyle()
.setMediaSession(mMediaSession.getSessionToken())
.setShowActionsInCompactView(0)
.setShowCancelButton(true)
.setCancelButtonIntent(getCancelIntent()))
// 添加Action按钮
.addAction(new NotificationCompat.Action(android.R.drawable.ic_media_previous,
"Previous", getPendingIntent(ACTION_PREVIOUS)))
.addAction(getPlayPauseAction())
.addAction(new NotificationCompat.Action(android.R.drawable.ic_media_next,
"Next", getPendingIntent(ACTION_NEXT)));
// 建立通知渠道
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
"My Audio Player Service", NotificationManager.IMPORTANCE_LOW);
mNotificationManager = NotificationManagerCompat.from(this);
mNotificationManager.createNotificationChannel(channel);
// 将通知发布为前台服务通知。
startForeground(NOTIFICATION_ID, builder.build());
// ...
}
// ...
// 处理Play/Pause action 按钮
private NotificationCompat.Action getPlayPauseAction() {
int icon;
String title;
PendingIntent intent;
if (mMedia.isPlaying()) {
icon = android.R.drawable.ic_media_pause;
title = "Pause";
intent = get