gpt4 book ai didi

android - 使用 NotificationCompat.MediaStyle 和 MediaSessionCompat 从通知中控制我的网络广播播放器

转载 作者:行者123 更新时间:2023-11-29 01:29:48 30 4
gpt4 key购买 nike

我有一个应用程序可以从服务中复制网络广播(使用 AACDecoder 库)并在 Activity 未恢复时在简单的持续通知中显示正在播放的内容。我想要的是通过 NotificationCompat.MediaStyle 添加一个按钮来停止(并最终重新开始)从通知播放,而不需要打开 Activity 。尽管它是一个网络广播播放器而不是一个有复制列表的播放器,我只需要一个播放暂停按钮。但即使在阅读了各种指南 (like this) 之后,我仍然无法正确理解和实现此功能,主要是因为最近弃用了此场景的新兼容性类。

我的通知是这样显示的:

这就是我想要的(大约,只需要暂停播放按钮): enter image description here

欢迎任何帮助。提前致谢!

最佳答案

您正在寻找的更多是 MediaStyle 通知的折叠版本。虽然我不确定如何强制它保持折叠状态,但这应该会让您走上正确的道路。我使用了一些在 UniversalMusicPlayer 中找到的代码,它们是为 Android 提供的示例代码的一部分。

具体来说 - 您想要查看 MediaNotificationManager 和 MusicService 类。

https://github.com/googlesamples/android-UniversalMusicPlayer/blob/master/mobile/src/main/java/com/example/android/uamp/MediaNotificationManager.java

两者对于您要实现的目标来说都有些过于复杂,但可以作为引用的好地方。特别是 createNotification 方法(请参阅下面的播放/暂停版本)。

private Notification createNotification() {
if (mMetadata == null || mPlaybackState == null) {
return null;
}

NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mService);
int playPauseButtonPosition = 0;


addPlayPauseAction(notificationBuilder);

MediaDescriptionCompat description = mMetadata.getDescription();

String fetchArtUrl = null;
Bitmap art = null;
if (description.getIconUri() != null) {
// This sample assumes the iconUri will be a valid URL formatted String, but
// it can actually be any valid Android Uri formatted String.
// async fetch the album art icon
String artUrl = description.getIconUri().toString();
art = ChannelImageCache.getInstance().getBigImage(artUrl);
if (art == null) {
fetchArtUrl = artUrl;
// use a placeholder art while the remote art is being downloaded
art = BitmapFactory.decodeResource(mService.getResources(),
R.drawable.ic_default_art);
}
}

notificationBuilder
.setStyle(new NotificationCompat.MediaStyle()
.setShowActionsInCompactView(
new int[]{playPauseButtonPosition}) // show only play/pause in compact view
.setMediaSession(mSession.getSessionToken()))
.setColor(mNotificationColor)
.setSmallIcon(R.drawable.ic_notification)
.setVisibility(Notification.VISIBILITY_PUBLIC)
.setUsesChronometer(true)
.setContentIntent(createContentIntent(description))
.setContentTitle(description.getTitle())
.setContentText(description.getSubtitle())
.setLargeIcon(art);

setNotificationPlaybackState(notificationBuilder);
if (fetchArtUrl != null) {
fetchBitmapFromURLAsync(fetchArtUrl, notificationBuilder);
}

return notificationBuilder.build();
}

private void addPlayPauseAction(NotificationCompat.Builder builder) {
String label;
int icon;
PendingIntent intent;
if (mPlaybackState.getState() == PlaybackStateCompat.STATE_PLAYING) {
label = mService.getString(R.string.mr_media_route_controller_pause);
icon = R.drawable.uamp_ic_pause_white_24dp;
intent = mPauseIntent;
} else {
label = mService.getString(R.string.mr_media_route_controller_play);
icon = R.drawable.uamp_ic_play_arrow_white_24dp;
intent = mPlayIntent;
}
builder.addAction(new NotificationCompat.Action(icon, label, intent));
}

此通知将在您的服务中使用 MediaSession(我假设您正在使用 AACDecoder/AACPlayer)。当您从播放器获取 ID3 元数据时,您需要更新元数据并将其设置为 mediaSession。

private void updateMetadata() {

final MediaMetadataCompat track = generateMediaMetadataCompat(currentMetaData);

mediaSession.setMetadata(track);
}

private MediaMetadataCompat generateMediaMetadataCompat(SomeMetadataModelObject streamMetadata)
{
currentMediaMetadataCompat = new MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, streamMetadata.getMediaId())
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, streamMetadata.getAlbumName())
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, streamMetadata.getArtistName())

.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, "http://somealbumart.png" )
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, streamMetadata.getSongTitle())

.build();
return currentMediaMetadataCompat;
}

关于android - 使用 NotificationCompat.MediaStyle 和 MediaSessionCompat 从通知中控制我的网络广播播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836149/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com