下面列出了怎么用android.media.MediaMetadata的API类实例代码及写法,或者点击链接到github查看源代码。
private void updateMediaSessionMetaData() {
if (mCurrentMediaItem == null) {
throw new IllegalArgumentException(
"mCurrentMediaItem is null in updateMediaSessionMetaData!");
}
MediaMetadataCompat.Builder metaDataBuilder = new MediaMetadataCompat.Builder();
if (mCurrentMediaItem.getMediaTitle() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE,
mCurrentMediaItem.getMediaTitle());
}
if (mCurrentMediaItem.getMediaAlbumName() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ALBUM,
mCurrentMediaItem.getMediaAlbumName());
}
if (mCurrentMediaItem.getMediaArtistName() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST,
mCurrentMediaItem.getMediaArtistName());
}
if (mCurrentMediaItem.getMediaAlbumArtResId() != 0) {
Bitmap albumArtBitmap = BitmapFactory.decodeResource(getResources(),
mCurrentMediaItem.getMediaAlbumArtResId());
metaDataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArtBitmap);
}
mMediaSession.setMetadata(metaDataBuilder.build());
}
@Override
public boolean onException(Exception e, Object model, Target target, boolean isFirstResource) {
BitmapDrawable resourceDrawable = (BitmapDrawable) getDrawable(R.drawable.default_album);
Bitmap resource = resourceDrawable.getBitmap();
albumNow = resource;
mediaSession.setMetadata(new MediaMetadata.Builder()
.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumNow)
.putString(MediaMetadata.METADATA_KEY_ARTIST, singerNow)
.putString(MediaMetadata.METADATA_KEY_TITLE, titleNow)
.build());
// PlaybackState.Builder stateBuilder = new PlaybackState.Builder();
// stateBuilder.setState(PlaybackState.STATE_PLAYING, mediaPlayer.getCurrentPosition(), 1.0f);
// mediaSession.setPlaybackState(stateBuilder.build());
buildNotification(MyConstant.playing);
return false;
}
@Override
public void onMetadataChanged(MediaMetadata metadata) {
super.onMetadataChanged(metadata);
if (metadata != null) {
mDevice.write(mediaArtistCharac,
getTextAsBytes(metadata, MediaMetadata.METADATA_KEY_ARTIST),
MediaService.this);
mDevice.write(mediaAlbumCharac,
getTextAsBytes(metadata, MediaMetadata.METADATA_KEY_ALBUM),
MediaService.this);
mDevice.write(mediaTitleCharac,
getTextAsBytes(metadata, MediaMetadata.METADATA_KEY_TITLE),
MediaService.this);
}
}
@Test
public void fromMediaMetadata() {
MediaMetadata input =
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, "Title")
.putString(MediaMetadata.METADATA_KEY_ARTIST, "Artist")
.putString(MediaMetadata.METADATA_KEY_ALBUM, "Album")
.putString(MediaMetadata.METADATA_KEY_ALBUM_ARTIST, "Album Artist")
.putBitmap(MediaMetadata.METADATA_KEY_ART, EMPTY_BITMAP)
.putLong(MediaMetadata.METADATA_KEY_DURATION, 10000)
.build();
Track output = Track.fromMediaMetadata(input);
assertThat(output.track()).isEqualTo("Title");
assertThat(output.artist()).isEqualTo("Artist");
assertThat(output.albumArtist()).hasValue("Album Artist");
assertThat(output.art()).isPresent();
assertThat(output.duration()).hasValue((long) 10000);
}
@Test
public void fromMediaMetadata_generatesInvalidTrackWhenNoArtistOrTitle() {
MediaMetadata empty = new MediaMetadata.Builder().build();
MediaMetadata noTitle =
new MediaMetadata.Builder().putString(MediaMetadata.METADATA_KEY_ARTIST, "Artist").build();
MediaMetadata noArtist =
new MediaMetadata.Builder().putString(MediaMetadata.METADATA_KEY_TITLE, "Title").build();
Track output1 = Track.fromMediaMetadata(empty);
Track output2 = Track.fromMediaMetadata(noTitle);
Track output3 = Track.fromMediaMetadata(noArtist);
assertThat(output1.isValid()).isFalse();
assertThat(output2.isValid()).isFalse();
assertThat(output3.isValid()).isFalse();
}
@Test
public void fromMediaMetadata_translatesShortDurationsToMilliseconds() {
long threeMinutesSeconds = 4 * 60;
long threeMinutesMs = 4 * 60 * 1000;
MediaMetadata millisecondsInput =
new MediaMetadata.Builder()
.putLong(MediaMetadata.METADATA_KEY_DURATION, threeMinutesMs)
.build();
MediaMetadata secondsInput =
new MediaMetadata.Builder()
.putLong(MediaMetadata.METADATA_KEY_DURATION, threeMinutesSeconds)
.build();
Track output1 = Track.fromMediaMetadata(millisecondsInput);
Track output2 = Track.fromMediaMetadata(secondsInput);
assertThat(output1.duration()).hasValue(threeMinutesMs);
assertThat(output2.duration()).hasValue(threeMinutesMs);
}
private void updateMediaSessionMetaData() {
if (mCurrentMediaItem == null) {
throw new IllegalArgumentException(
"mCurrentMediaItem is null in updateMediaSessionMetaData!");
}
MediaMetadataCompat.Builder metaDataBuilder = new MediaMetadataCompat.Builder();
if (mCurrentMediaItem.getMediaTitle() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE,
mCurrentMediaItem.getMediaTitle());
}
if (mCurrentMediaItem.getMediaAlbumName() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ALBUM,
mCurrentMediaItem.getMediaAlbumName());
}
if (mCurrentMediaItem.getMediaArtistName() != null) {
metaDataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST,
mCurrentMediaItem.getMediaArtistName());
}
if (mCurrentMediaItem.getMediaAlbumArtResId() != 0) {
Bitmap albumArtBitmap = BitmapFactory.decodeResource(getResources(),
mCurrentMediaItem.getMediaAlbumArtResId());
metaDataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArtBitmap);
}
mMediaSession.setMetadata(metaDataBuilder.build());
}
public static MediaMetadata getMetadata(Context ctx, String mediaId) {
MediaMetadata metadataWithoutBitmap = music.get(mediaId);
Bitmap albumArt = getAlbumBitmap(ctx, mediaId);
// Since MediaMetadata is immutable, we need to create a copy to set the album art
// We don't set it initially on all items so that they don't take unnecessary memory
MediaMetadata.Builder builder = new MediaMetadata.Builder();
for (String key: new String[]{MediaMetadata.METADATA_KEY_MEDIA_ID,
MediaMetadata.METADATA_KEY_ALBUM, MediaMetadata.METADATA_KEY_ARTIST,
MediaMetadata.METADATA_KEY_GENRE, MediaMetadata.METADATA_KEY_TITLE}) {
builder.putString(key, metadataWithoutBitmap.getString(key));
}
builder.putLong(MediaMetadata.METADATA_KEY_DURATION,
metadataWithoutBitmap.getLong(MediaMetadata.METADATA_KEY_DURATION));
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArt);
return builder.build();
}
private static void createMediaMetadata(String mediaId, String title, String artist,
String album, String genre, long duration, int musicResId, int albumArtResId,
String albumArtResName) {
music.put(mediaId,
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
.putString(MediaMetadata.METADATA_KEY_ALBUM, album)
.putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
.putLong(MediaMetadata.METADATA_KEY_DURATION, duration * 1000)
.putString(MediaMetadata.METADATA_KEY_GENRE, genre)
.putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_TITLE, title)
.build());
albumRes.put(mediaId, albumArtResId);
musicRes.put(mediaId, musicResId);
}
public static MediaMetadata getMetadata(Context ctx, String mediaId) {
MediaMetadata metadataWithoutBitmap = music.get(mediaId);
Bitmap albumArt = getAlbumBitmap(ctx, mediaId);
// Since MediaMetadata is immutable, we need to create a copy to set the album art
// We don't set it initially on all items so that they don't take unnecessary memory
MediaMetadata.Builder builder = new MediaMetadata.Builder();
for (String key: new String[]{MediaMetadata.METADATA_KEY_MEDIA_ID,
MediaMetadata.METADATA_KEY_ALBUM, MediaMetadata.METADATA_KEY_ARTIST,
MediaMetadata.METADATA_KEY_GENRE, MediaMetadata.METADATA_KEY_TITLE}) {
builder.putString(key, metadataWithoutBitmap.getString(key));
}
builder.putLong(MediaMetadata.METADATA_KEY_DURATION,
metadataWithoutBitmap.getLong(MediaMetadata.METADATA_KEY_DURATION));
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArt);
return builder.build();
}
private static void createMediaMetadata(String mediaId, String title, String artist,
String album, String genre, long duration, int musicResId, int albumArtResId,
String albumArtResName) {
music.put(mediaId,
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
.putString(MediaMetadata.METADATA_KEY_ALBUM, album)
.putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
.putLong(MediaMetadata.METADATA_KEY_DURATION, duration * 1000)
.putString(MediaMetadata.METADATA_KEY_GENRE, genre)
.putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_TITLE, title)
.build());
albumRes.put(mediaId, albumArtResId);
musicRes.put(mediaId, musicResId);
}
public void showNotify(String artist, String album, String title, int tracknr) {
PlaybackState state = new PlaybackState.Builder()
.setActions(
PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackState.STATE_PLAYING, 1, 1, SystemClock.elapsedRealtime())
.build();
MediaMetadata metadata = new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, title)
.putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
.putString(MediaMetadata.METADATA_KEY_ALBUM_ARTIST, artist)
.putString(MediaMetadata.METADATA_KEY_ALBUM, album)
.putLong(MediaMetadata.METADATA_KEY_NUM_TRACKS, tracknr)
.putLong(MediaMetadata.METADATA_KEY_DURATION, 10)
.build();
mMediaSession.setActive(true);
mMediaSession.setMetadata(metadata);
mMediaSession.setPlaybackState(state);
int timeout = getTimeout();
if (timeout != 0) {
mHandler.removeMessages(HANDLER_WHAT_CLEAR);
mHandler.sendEmptyMessageDelayed(HANDLER_WHAT_CLEAR, timeout * 1000);
}
}
public static MediaMetadata getMetadata(Context ctx, String mediaId) {
MediaMetadata metadataWithoutBitmap = music.get(mediaId);
Bitmap albumArt = getAlbumBitmap(ctx, mediaId);
// Since MediaMetadata is immutable, we need to create a copy to set the album art
// We don't set it initially on all items so that they don't take unnecessary memory
MediaMetadata.Builder builder = new MediaMetadata.Builder();
for (String key: new String[]{MediaMetadata.METADATA_KEY_MEDIA_ID,
MediaMetadata.METADATA_KEY_ALBUM, MediaMetadata.METADATA_KEY_ARTIST,
MediaMetadata.METADATA_KEY_GENRE, MediaMetadata.METADATA_KEY_TITLE}) {
builder.putString(key, metadataWithoutBitmap.getString(key));
}
builder.putLong(MediaMetadata.METADATA_KEY_DURATION,
metadataWithoutBitmap.getLong(MediaMetadata.METADATA_KEY_DURATION));
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArt);
return builder.build();
}
private static void createMediaMetadata(String mediaId, String title, String artist,
String album, String genre, long duration, int musicResId, int albumArtResId,
String albumArtResName) {
music.put(mediaId,
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
.putString(MediaMetadata.METADATA_KEY_ALBUM, album)
.putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
.putLong(MediaMetadata.METADATA_KEY_DURATION, duration * 1000)
.putString(MediaMetadata.METADATA_KEY_GENRE, genre)
.putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_TITLE, title)
.build());
albumRes.put(mediaId, albumArtResId);
musicRes.put(mediaId, musicResId);
}
public static MediaMetadata getMetadata(Context ctx, String mediaId) {
MediaMetadata metadataWithoutBitmap = music.get(mediaId);
Bitmap albumArt = getAlbumBitmap(ctx, mediaId);
// Since MediaMetadata is immutable, we need to create a copy to set the album art
// We don't set it initially on all items so that they don't take unnecessary memory
MediaMetadata.Builder builder = new MediaMetadata.Builder();
for (String key: new String[]{MediaMetadata.METADATA_KEY_MEDIA_ID,
MediaMetadata.METADATA_KEY_ALBUM, MediaMetadata.METADATA_KEY_ARTIST,
MediaMetadata.METADATA_KEY_GENRE, MediaMetadata.METADATA_KEY_TITLE}) {
builder.putString(key, metadataWithoutBitmap.getString(key));
}
builder.putLong(MediaMetadata.METADATA_KEY_DURATION,
metadataWithoutBitmap.getLong(MediaMetadata.METADATA_KEY_DURATION));
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, albumArt);
return builder.build();
}
private static void createMediaMetadata(String mediaId, String title, String artist,
String album, String genre, long duration, int musicResId, int albumArtResId,
String albumArtResName) {
music.put(mediaId,
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, mediaId)
.putString(MediaMetadata.METADATA_KEY_ALBUM, album)
.putString(MediaMetadata.METADATA_KEY_ARTIST, artist)
.putLong(MediaMetadata.METADATA_KEY_DURATION, duration * 1000)
.putString(MediaMetadata.METADATA_KEY_GENRE, genre)
.putString(MediaMetadata.METADATA_KEY_ALBUM_ART_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI, getAlbumArtUri(albumArtResName))
.putString(MediaMetadata.METADATA_KEY_TITLE, title)
.build());
albumRes.put(mediaId, albumArtResId);
musicRes.put(mediaId, musicResId);
}
@Override
public void run(@NonNull MediaController2 mc) {
final MediaController2Lollipop mcl = (MediaController2Lollipop) mc;
final MediaController source = mcl.mMediaController;
if (source != null && mToken.equals(source.getSessionToken())) {
long now = SystemClock.elapsedRealtime();
final MediaMetadata metadata = source.getMetadata();
final PlaybackState playbackState = source.getPlaybackState();
long delta = SystemClock.elapsedRealtime() - now;
Log.i(TAG, "Got the new metadata & playback state in " + delta + " millis. "
+ "The media controller is " + source.getPackageName());
mHandler.post(new Runnable() {
@Override
public void run() {
mcl.updateMetadata(metadata);
mcl.updatePlaybackState(playbackState);
}
});
}
}
private PlaybackState getStateWithUpdatedPosition() {
PlaybackState state;
long duration = -1;
synchronized (mLock) {
state = mPlaybackState;
if (mMetadata != null && mMetadata.containsKey(MediaMetadata.METADATA_KEY_DURATION)) {
duration = mMetadata.getLong(MediaMetadata.METADATA_KEY_DURATION);
}
}
PlaybackState result = null;
if (state != null) {
if (state.getState() == PlaybackState.STATE_PLAYING
|| state.getState() == PlaybackState.STATE_FAST_FORWARDING
|| state.getState() == PlaybackState.STATE_REWINDING) {
long updateTime = state.getLastPositionUpdateTime();
long currentTime = SystemClock.elapsedRealtime();
if (updateTime > 0) {
long position = (long) (state.getPlaybackSpeed()
* (currentTime - updateTime)) + state.getPosition();
if (duration >= 0 && position > duration) {
position = duration;
} else if (position < 0) {
position = 0;
}
PlaybackState.Builder builder = new PlaybackState.Builder(state);
builder.setState(state.getState(), position, state.getPlaybackSpeed(),
currentTime);
result = builder.build();
}
}
}
return result == null ? state : result;
}
@Override
public void setMetadata(MediaMetadata metadata) {
synchronized (mLock) {
MediaMetadata temp = metadata == null ? null : new MediaMetadata.Builder(metadata)
.build();
// This is to guarantee that the underlying bundle is unparceled
// before we set it to prevent concurrent reads from throwing an
// exception
if (temp != null) {
temp.size();
}
mMetadata = temp;
}
mHandler.post(MessageHandler.MSG_UPDATE_METADATA);
}
private void handlePlayRequest() {
delayedStopHandler.removeCallbacksAndMessages(null);
if (!serviceStarted) {
try {
startService(new Intent(getApplicationContext(), MusicBrowserService.class));
} catch (Throwable e) {
FileLog.e(e);
}
serviceStarted = true;
}
if (!mediaSession.isActive()) {
mediaSession.setActive(true);
}
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
if (messageObject == null) {
return;
}
MediaMetadata.Builder builder = new MediaMetadata.Builder();
builder.putLong(MediaMetadata.METADATA_KEY_DURATION, messageObject.getDuration() * 1000);
builder.putString(MediaMetadata.METADATA_KEY_ARTIST, messageObject.getMusicAuthor());
builder.putString(MediaMetadata.METADATA_KEY_TITLE, messageObject.getMusicTitle());
AudioInfo audioInfo = MediaController.getInstance().getAudioInfo();
if (audioInfo != null) {
Bitmap bitmap = audioInfo.getCover();
if (bitmap != null) {
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bitmap);
}
}
mediaSession.setMetadata(builder.build());
}
private void handlePlayRequest() {
delayedStopHandler.removeCallbacksAndMessages(null);
if (!serviceStarted) {
try {
startService(new Intent(getApplicationContext(), MusicBrowserService.class));
} catch (Throwable e) {
FileLog.e(e);
}
serviceStarted = true;
}
if (!mediaSession.isActive()) {
mediaSession.setActive(true);
}
MessageObject messageObject = MediaController.getInstance().getPlayingMessageObject();
if (messageObject == null) {
return;
}
MediaMetadata.Builder builder = new MediaMetadata.Builder();
builder.putLong(MediaMetadata.METADATA_KEY_DURATION, messageObject.getDuration() * 1000);
builder.putString(MediaMetadata.METADATA_KEY_ARTIST, messageObject.getMusicAuthor());
builder.putString(MediaMetadata.METADATA_KEY_TITLE, messageObject.getMusicTitle());
AudioInfo audioInfo = MediaController.getInstance().getAudioInfo();
if (audioInfo != null) {
Bitmap bitmap = audioInfo.getCover();
if (bitmap != null) {
builder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bitmap);
}
}
mediaSession.setMetadata(builder.build());
}
private void updateMetadata(final Clip clip) {
final MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder();
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, clip.getTitle());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE,
clip.getDescription());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI,
clip.getCardImageUrl());
// And at minimum the title and artist for legacy support
metadataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE, clip.getTitle());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST, clip.getDescription());
Glide.with(this)
.asBitmap()
.load(Uri.parse(clip.getCardImageUrl()))
.into(new SimpleTarget<Bitmap>(500, 500) {
@Override
public void onResourceReady(Bitmap bitmap, Transition transition) {
metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART, bitmap);
mSession.setMetadata(metadataBuilder.build());
}
@Override
public void onLoadFailed(Drawable errorDrawable) {
Log.e(TAG, "onLoadFailed: " + errorDrawable);
mSession.setMetadata(metadataBuilder.build());
}
});
}
@Override
public void onMetadataChanged(MediaMetadata metadata) {
Log.d(TAG, "received update of media metadata");
updateMovieView(
metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE),
metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE),
metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI),
metadata.getLong(MediaMetadata.METADATA_KEY_DURATION)
);
}
public void handleMetadataChange(String player, MediaMetadata metadata) {
if (metadata == null) {
return;
}
Track track =
metadataTransformers.transformForPackageName(player, Track.fromMediaMetadata(metadata));
if (!track.isValid()) {
return;
}
PlayerState playerState = getOrCreatePlayerState(player);
playerState.setTrack(track);
}
@Test
public void fromMediaMetadata_runsTitleExtractorIfArtistMissing() {
MediaMetadata input =
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_TITLE, "Test - Input")
.build();
Track output = Track.fromMediaMetadata(input);
assertThat(output.artist()).isEqualTo("Test");
assertThat(output.track()).isEqualTo("Input");
}
@Test
public void fromMediaMetadata_usesDisplayTitleIfTitleMissing() {
MediaMetadata input =
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, "Display Title")
.build();
Track output = Track.fromMediaMetadata(input);
assertThat(output.track()).isEqualTo("Display Title");
}
private void updateMetadata(final Movie movie) {
final MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder();
String title = movie.getTitle().replace("_", " -");
metadataBuilder.putString(MediaMetadata.METADATA_KEY_MEDIA_ID, movie.getId());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE, title);
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_SUBTITLE,
movie.getStudio());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_DESCRIPTION,
movie.getDescription());
metadataBuilder.putString(MediaMetadata.METADATA_KEY_DISPLAY_ICON_URI,
movie.getCardImageUrl());
metadataBuilder.putLong(MediaMetadata.METADATA_KEY_DURATION, mDuration);
// And at minimum the title and artist for legacy support
metadataBuilder.putString(MediaMetadata.METADATA_KEY_TITLE, title);
metadataBuilder.putString(MediaMetadata.METADATA_KEY_ARTIST, movie.getStudio());
Glide.with(this)
.load(Uri.parse(movie.getCardImageUrl()))
.asBitmap()
.into(new SimpleTarget<Bitmap>(500, 500) {
@Override
public void onResourceReady(Bitmap bitmap, GlideAnimation anim) {
metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ART, bitmap);
mSession.setMetadata(metadataBuilder.build());
}
});
}
@Test
public void fromMediaMetadata_nonPositiveDurationIsAbsent() {
MediaMetadata input1 =
new MediaMetadata.Builder().putLong(MediaMetadata.METADATA_KEY_DURATION, 0).build();
MediaMetadata input2 =
new MediaMetadata.Builder().putLong(MediaMetadata.METADATA_KEY_DURATION, -1).build();
Track output1 = Track.fromMediaMetadata(input1);
Track output2 = Track.fromMediaMetadata(input2);
assertThat(output1.duration()).isAbsent();
assertThat(output2.duration()).isAbsent();
}
@Test
public void fromMediaMetadata_usesAlbumArtistIfArtistMissing() {
MediaMetadata input =
new MediaMetadata.Builder()
.putString(MediaMetadata.METADATA_KEY_ALBUM_ARTIST, "Artist")
.build();
Track output = Track.fromMediaMetadata(input);
assertThat(output.artist()).isEqualTo("Artist");
}
private void setUpMediaSession() {
mediaSession = new MediaSession(this, TAG);
mediaSession.setActive(true);
mediaSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
mediaSession.setPlaybackState(
new PlaybackState.Builder()
.setState(PlaybackState.STATE_PLAYING, 0L, 0F)
.setActions(PlaybackState.ACTION_PAUSE |
PlaybackState.ACTION_PLAY |
PlaybackState.ACTION_REWIND |
PlaybackState.ACTION_FAST_FORWARD)
.build());
mediaSession.setMetadata(new MediaMetadata.Builder().build());
}