【发布时间】:2014-11-21 02:08:47
【问题描述】:
我们正在将正在进行的播放通知迁移到 Lollipop 中引入的 MediaStyle 通知。 RemoteControlClient 似乎已被弃用,并且 MediaStyle 通知未处理媒体按钮事件(例如通过耳机遥控器暂停/播放)。
有人得到这个作品吗?没有调用 MediaSessionCallback 中的任何事件。
这是媒体会话的初始化方式
mSession = new MediaSessionCompat(this, TAG);
mSession.setCallback(new MediaSessionCallback());
mSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mSession.setPlaybackToLocal(AudioManager.STREAM_MUSIC);
mSession.setActive(true);
这是元数据的设置方式
MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder();
metadataBuilder
.putLong(MediaMetadata.METADATA_KEY_DURATION, clip.getDuration())
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, clip.getClipId())
.putString(MediaMetadata.METADATA_KEY_TITLE, clip.getTitle())
.putString(MediaMetadata.METADATA_KEY_ARTIST, clip.getSourceName())
.putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, clip.getImageUrl())
.putLong(MediaMetadata.METADATA_KEY_DURATION, clip.getDuration());
mSession.setMetadata(metadataBuilder.build());
最后是通知代码:
MediaSession mediaSession = (MediaSession) session.getMediaSession();
Notification.Builder builder =
new Notification.Builder(c)
.setDefaults(0)
.setSmallIcon(R.drawable.ic_notif)
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
.setContentTitle(clip.getTitle())
.setContentText(clip.getSourceName())
.setProgress((int)duration, (int)progress, false)
.setWhen(0)
.setContentIntent(pendingIntent);
if (playing) {
builder.addAction(R.drawable.ic_media_pause, c.getString(R.string.media_pause),
getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_PAUSE));
} else {
builder.addAction(R.drawable.ic_media_play, c.getString(R.string.media_play),
getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_PLAY));
}
builder.addAction(R.drawable.ic_media_next, c.getString(R.string.media_next),
getPendingIntentForKeyCode(app.getApplicationContext(), KeyEvent.KEYCODE_MEDIA_NEXT));
builder.setStyle(new Notification.MediaStyle()
.setMediaSession(mediaSession.getSessionToken())
.setShowActionsInCompactView(new int[] {1, 2})
)
);
notification = builder.build();
【问题讨论】:
标签: android android-5.0-lollipop