在我的应用程序中,我使用MediaSessionCompat
来处理从我的媒体播放器服务播放音频,特别是,我希望将当前歌曲的元数据广播到蓝牙设备(这是可行的),并将锁屏图像设置为当前歌曲的专辑封面。
类似于这个问题:Set lock screen background in Android (like Spotify do)
每次歌曲更改时,我首先从MediaSessionCompat
中清除当前的MediaMetadataCompat
和PlaybackStateCompat
,如下所示:
mSession.setActive(false);
mSession.setMetadata(null);
mSession.setPlaybackState(null);
然后,我用它们各自的构建器创建这些类的新示例
MediaMetadataCompat metadata = new MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE,
songName)
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST,
artistName)
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM,
albumName)
.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, durationMs)
.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap)
.build();
PlaybackStateCompat state = new PlaybackStateCompat.Builder()
.setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_PLAY_PAUSE | PlaybackStateCompat.ACTION_PAUSE |
PlaybackStateCompat.ACTION_SKIP_TO_NEXT | PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackStateCompat.STATE_PLAYING, positionMs, 1.0f, SystemClock.elapsedRealtime())
.build();
然后在MediaSessionCompat
上设置新的元数据
mSession.setActive(true);
mSession.setMetadata(metadata);
mSession.setPlaybackState(state);
在我的蓝牙设备上,元数据工作正常,每次歌曲更改时都会更改。然而,在我的手机上,锁定屏幕专辑封面只更新第一次。我已经确认我正在设置的位图是新的,但图像不会更改。
我还在服务中创建了一个媒体风格的通知,允许用户从持续的通知和锁定屏幕控制音乐。
NotificationCompat.MediaStyle style = new NotificationCompat.MediaStyle();
style.setShowActionsInCompactView(0, 1, 2, 3, 4);
Intent intent = new Intent(this, DestinationActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent)
.setStyle(style)
.setContentTitle(songName)
.setContentText(artistName)
.setLargeIcon(bitmap);
// Code to set notification actions
startForeground(NOTIFICATION_ID_PLAYER_CONTROLS, builder.build());
但是,我的媒体通知的setLargeIcon
方法对锁定屏幕上显示的专辑封面没有影响。这使得它显示在通知本身中,但不是作为锁定屏幕背景。
2条答案
按热度按时间5fjcxozz1#
您需要的是
MediaStyle
通知VISIBILITY_PUBLIC
值将使您在此处设置的信息在锁定屏幕上可见欲了解更多信息,请参阅@ianhanniballake https://gist.github.com/ianhanniballake/47617ec3488e0257325c的这一要点
zpf6vheq2#
在你的元数据中你应该添加
metadata.putLong(MediaMetadata.METADATA_KEY_DURATION, duration);
并且你应该经常更新它。duration
变量应该是long
。这解决了我的问题。