Here are the examples of the java api class android.support.v4.media.MediaMetadataCompat taken from open source projects.
1. MusicProviderTest#testUpdateMusicArt()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testUpdateMusicArt() throws Exception { Bitmap bIcon = Bitmap.createBitmap(2, 2, Bitmap.Config.ALPHA_8); Bitmap bArt = Bitmap.createBitmap(2, 2, Bitmap.Config.ALPHA_8); MediaMetadataCompat metadata = provider.getShuffledMusic().iterator().next(); String musicId = metadata.getDescription().getMediaId(); assertNotEquals(bArt, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART)); assertNotEquals(bIcon, metadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON)); provider.updateMusicArt(musicId, bArt, bIcon); MediaMetadataCompat newMetadata = provider.getMusic(musicId); assertEquals(bArt, newMetadata.getBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART)); assertEquals(bIcon, newMetadata.getBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON)); }
2. QueueHelper#convertToQueue()
Project: LyricHere
File: QueueHelper.java
File: QueueHelper.java
private static List<MediaSessionCompat.QueueItem> convertToQueue(Iterable<MediaMetadataCompat> tracks, String... categories) { List<MediaSessionCompat.QueueItem> queue = new ArrayList<>(); int count = 0; for (MediaMetadataCompat track : tracks) { // We create a hierarchy-aware mediaID, so we know what the queue is about by looking // at the QueueItem media IDs. String hierarchyAwareMediaID = MediaIDHelper.createMediaID(track.getDescription().getMediaId(), categories); MediaMetadataCompat trackCopy = new MediaMetadataCompat.Builder(track).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build(); // We don't expect queues to change after created, so we use the item index as the // queueId. Any other number unique in the queue would work. MediaSessionCompat.QueueItem item = new MediaSessionCompat.QueueItem(trackCopy.getDescription(), count++); queue.add(item); } return queue; }
3. MusicService#setCustomAction()
Project: LyricHere
File: MusicService.java
File: MusicService.java
private void setCustomAction(PlaybackStateCompat.Builder stateBuilder) { MediaMetadataCompat currentMusic = getCurrentPlayingMusic(); if (currentMusic != null) { // Set appropriate "Favorite" icon on Custom action: String musicId = currentMusic.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); int favoriteIcon = R.drawable.ic_star_off; if (mMusicProvider.isFavorite(musicId)) { favoriteIcon = R.drawable.ic_star_on; } LogUtils.d(TAG, "updatePlaybackState, setting Favorite custom action of music ", musicId, " current favorite=", mMusicProvider.isFavorite(musicId)); stateBuilder.addCustomAction(CUSTOM_ACTION_THUMBS_UP, getString(R.string.favorite), favoriteIcon); } }
4. QueueHelper#getRandomQueue()
Project: android-UniversalMusicPlayer
File: QueueHelper.java
File: QueueHelper.java
/** * Create a random queue with at most {@link #RANDOM_QUEUE_SIZE} elements. * * @param musicProvider the provider used for fetching music. * @return list containing {@link MediaSessionCompat.QueueItem}'s */ public static List<MediaSessionCompat.QueueItem> getRandomQueue(MusicProvider musicProvider) { List<MediaMetadataCompat> result = new ArrayList<>(RANDOM_QUEUE_SIZE); Iterable<MediaMetadataCompat> shuffled = musicProvider.getShuffledMusic(); for (MediaMetadataCompat metadata : shuffled) { if (result.size() == RANDOM_QUEUE_SIZE) { break; } result.add(metadata); } LogHelper.d(TAG, "getRandomQueue: result.size=", result.size()); return convertToQueue(result, MEDIA_ID_MUSICS_BY_SEARCH, "random"); }
5. QueueHelper#convertToQueue()
Project: android-UniversalMusicPlayer
File: QueueHelper.java
File: QueueHelper.java
private static List<MediaSessionCompat.QueueItem> convertToQueue(Iterable<MediaMetadataCompat> tracks, String... categories) { List<MediaSessionCompat.QueueItem> queue = new ArrayList<>(); int count = 0; for (MediaMetadataCompat track : tracks) { // We create a hierarchy-aware mediaID, so we know what the queue is about by looking // at the QueueItem media IDs. String hierarchyAwareMediaID = MediaIDHelper.createMediaID(track.getDescription().getMediaId(), categories); MediaMetadataCompat trackCopy = new MediaMetadataCompat.Builder(track).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build(); // We don't expect queues to change after created, so we use the item index as the // queueId. Any other number unique in the queue would work. MediaSessionCompat.QueueItem item = new MediaSessionCompat.QueueItem(trackCopy.getDescription(), count++); queue.add(item); } return queue; }
6. FullScreenPlayerActivity#connectToSession()
Project: android-UniversalMusicPlayer
File: FullScreenPlayerActivity.java
File: FullScreenPlayerActivity.java
private void connectToSession(MediaSessionCompat.Token token) throws RemoteException { MediaControllerCompat mediaController = new MediaControllerCompat(FullScreenPlayerActivity.this, token); if (mediaController.getMetadata() == null) { finish(); return; } setSupportMediaController(mediaController); mediaController.registerCallback(mCallback); PlaybackStateCompat state = mediaController.getPlaybackState(); updatePlaybackState(state); MediaMetadataCompat metadata = mediaController.getMetadata(); if (metadata != null) { updateMediaDescription(metadata.getDescription()); updateDuration(metadata); } updateProgress(); if (state != null && (state.getState() == PlaybackStateCompat.STATE_PLAYING || state.getState() == PlaybackStateCompat.STATE_BUFFERING)) { scheduleSeekbarUpdate(); } }
7. CastPlayback#loadMedia()
Project: android-UniversalMusicPlayer
File: CastPlayback.java
File: CastPlayback.java
private void loadMedia(String mediaId, boolean autoPlay) throws TransientNetworkDisconnectionException, NoConnectionException, JSONException { String musicId = MediaIDHelper.extractMusicIDFromMediaID(mediaId); MediaMetadataCompat track = mMusicProvider.getMusic(musicId); if (track == null) { throw new IllegalArgumentException("Invalid mediaId " + mediaId); } if (!TextUtils.equals(mediaId, mCurrentMediaId)) { mCurrentMediaId = mediaId; mCurrentPosition = 0; } JSONObject customData = new JSONObject(); customData.put(ITEM_ID, mediaId); MediaInfo media = toCastMediaMetadata(track, customData); VideoCastManager.getInstance().loadMedia(media, autoPlay, mCurrentPosition, customData); }
8. MusicProvider#createMediaItem()
Project: android-UniversalMusicPlayer
File: MusicProvider.java
File: MusicProvider.java
private MediaBrowserCompat.MediaItem createMediaItem(MediaMetadataCompat metadata) { // Since mediaMetadata fields are immutable, we need to create a copy, so we // can set a hierarchy-aware mediaID. We will need to know the media hierarchy // when we get a onPlayFromMusicID call, so we can create the proper queue based // on where the music was selected from (by artist, by genre, random, etc) String genre = metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE); String hierarchyAwareMediaID = MediaIDHelper.createMediaID(metadata.getDescription().getMediaId(), MEDIA_ID_MUSICS_BY_GENRE, genre); MediaMetadataCompat copy = new MediaMetadataCompat.Builder(metadata).putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID).build(); return new MediaBrowserCompat.MediaItem(copy.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE); }
9. MusicProvider#updateMusicArt()
Project: android-UniversalMusicPlayer
File: MusicProvider.java
File: MusicProvider.java
public synchronized void updateMusicArt(String musicId, Bitmap albumArt, Bitmap icon) { MediaMetadataCompat metadata = getMusic(musicId); metadata = new MediaMetadataCompat.Builder(metadata).putBitmap(// example, on the lockscreen background when the media session is active. MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArt).putBitmap(// necessary MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon).build(); MutableMediaMetadata mutableMetadata = mMusicListById.get(musicId); if (mutableMetadata == null) { throw new IllegalStateException("Unexpected error: Inconsistent data structures in " + "MusicProvider"); } mutableMetadata.metadata = metadata; }
10. QueueManagerTest#testSetQueueFromMusic()
Project: android-UniversalMusicPlayer
File: QueueManagerTest.java
File: QueueManagerTest.java
@Test public void testSetQueueFromMusic() throws Exception { QueueManager queueManager = createQueueManagerWithValidation(null, -1, null); // get the first music of the first genre and build a hierarchy-aware version of its // mediaId String genre = provider.getGenres().iterator().next(); MediaMetadataCompat metadata = provider.getMusicsByGenre(genre).iterator().next(); String hierarchyAwareMediaID = MediaIDHelper.createMediaID(metadata.getDescription().getMediaId(), MediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE, genre); // set a queue from the hierarchyAwareMediaID. It should contain all music with the same // genre queueManager.setQueueFromMusic(hierarchyAwareMediaID); // count all songs with the same genre int count = 0; for (MediaMetadataCompat m : provider.getMusicsByGenre(genre)) { count++; } // check if size matches assertEquals(count, queueManager.getCurrentQueueSize()); // Now check if all songs in current queue have the expected genre: for (int i = 0; i < queueManager.getCurrentQueueSize(); i++) { MediaSessionCompat.QueueItem item = queueManager.getCurrentMusic(); String musicId = MediaIDHelper.extractMusicIDFromMediaID(item.getDescription().getMediaId()); String itemGenre = provider.getMusic(musicId).getString(MediaMetadataCompat.METADATA_KEY_GENRE); assertEquals(genre, itemGenre); queueManager.skipQueuePosition(1); } }
11. MusicService#updateMetadata()
Project: LyricHere
File: MusicService.java
File: MusicService.java
private void updateMetadata() { if (!QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) { LogUtils.e(TAG, "Can't retrieve current metadata."); updatePlaybackState(getResources().getString(R.string.error_no_metadata)); return; } MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue); String musicId = MediaIDHelper.extractMusicIDFromMediaID(queueItem.getDescription().getMediaId()); MediaMetadataCompat track = mMusicProvider.getMusic(musicId); if (track == null) { throw new IllegalArgumentException("Invalid musicId " + musicId); } final String trackId = track.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID); if (!TextUtils.equals(musicId, trackId)) { IllegalStateException e = new IllegalStateException("track ID should match musicId."); LogUtils.e(TAG, "track ID should match musicId.", " musicId=", musicId, " trackId=", trackId, " mediaId from queueItem=", queueItem.getDescription().getMediaId(), " title from queueItem=", queueItem.getDescription().getTitle(), " mediaId from track=", track.getDescription().getMediaId(), " title from track=", track.getDescription().getTitle(), " source.hashcode from track=", track.getString(MusicProvider.CUSTOM_METADATA_TRACK_SOURCE).hashCode(), e); throw e; } LogUtils.d(TAG, "Updating metadata for MusicID= " + musicId); mSession.setMetadata(track); // locked screen and in other places. if (track.getDescription().getIconBitmap() == null && track.getDescription().getIconUri() != null) { String albumUri = track.getDescription().getIconUri().toString(); AlbumArtCache.getInstance().fetch(albumUri, new AlbumArtCache.FetchListener() { @Override public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) { MediaSessionCompat.QueueItem queueItem = mPlayingQueue.get(mCurrentIndexOnQueue); MediaMetadataCompat track = mMusicProvider.getMusic(trackId); track = new MediaMetadataCompat.Builder(track).putBitmap(// example, on the lockscreen background when the media session is active. MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap).putBitmap(// necessary.. MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, icon).build(); mMusicProvider.updateMusic(trackId, track); // If we are still playing the same music String currentPlayingId = MediaIDHelper.extractMusicIDFromMediaID(queueItem.getDescription().getMediaId()); if (trackId.equals(currentPlayingId)) { mSession.setMetadata(track); } } }); } }
12. CustomMRControllerDialog#updateViews()
Project: AntennaPod
File: CustomMRControllerDialog.java
File: CustomMRControllerDialog.java
private void updateViews() { if (!viewsCreated || token == null || mediaController == null) { rootView.setVisibility(View.GONE); return; } MediaMetadataCompat metadata = mediaController.getMetadata(); MediaDescriptionCompat description = metadata == null ? null : metadata.getDescription(); if (description == null) { rootView.setVisibility(View.GONE); return; } PlaybackStateCompat state = mediaController.getPlaybackState(); MediaRouter.RouteInfo route = MediaRouter.getInstance(getContext()).getSelectedRoute(); CharSequence title = description.getTitle(); boolean hasTitle = !TextUtils.isEmpty(title); CharSequence subtitle = description.getSubtitle(); boolean hasSubtitle = !TextUtils.isEmpty(subtitle); boolean showTitle = false; boolean showSubtitle = false; if (route.getPresentationDisplayId() != MediaRouter.RouteInfo.PRESENTATION_DISPLAY_ID_NONE) { // The user is currently casting screen. titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_casting_screen); showTitle = true; } else if (state == null || state.getState() == PlaybackStateCompat.STATE_NONE) { // (Only exception is bluetooth where we don't show anything.) if (!route.isDeviceTypeBluetooth()) { titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_no_media_selected); showTitle = true; } } else if (!hasTitle && !hasSubtitle) { titleView.setText(android.support.v7.mediarouter.R.string.mr_controller_no_info_available); showTitle = true; } else { if (hasTitle) { titleView.setText(title); showTitle = true; } if (hasSubtitle) { subtitleView.setText(subtitle); showSubtitle = true; } } if (showSubtitle) { titleView.setSingleLine(); } else { titleView.setMaxLines(2); } titleView.setVisibility(showTitle ? View.VISIBLE : View.GONE); subtitleView.setVisibility(showSubtitle ? View.VISIBLE : View.GONE); updateState(); if (rootView.getVisibility() != View.VISIBLE) { artView.setVisibility(View.GONE); rootView.setVisibility(View.VISIBLE); } if (fetchArtSubscription != null) { fetchArtSubscription.unsubscribe(); } fetchArtSubscription = Observable.fromCallable(() -> fetchArt(description)).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread()).subscribe( result -> { fetchArtSubscription = null; if (result.first != null) { artView.setBackgroundColor(result.second); artView.setImageBitmap(result.first); artView.setVisibility(View.VISIBLE); } else { artView.setVisibility(View.GONE); } }, error -> Log.e(TAG, Log.getStackTraceString(error))); }
13. QueueManager#updateMetadata()
Project: android-UniversalMusicPlayer
File: QueueManager.java
File: QueueManager.java
public void updateMetadata() { MediaSessionCompat.QueueItem currentMusic = getCurrentMusic(); if (currentMusic == null) { mListener.onMetadataRetrieveError(); return; } final String musicId = MediaIDHelper.extractMusicIDFromMediaID(currentMusic.getDescription().getMediaId()); MediaMetadataCompat metadata = mMusicProvider.getMusic(musicId); if (metadata == null) { throw new IllegalArgumentException("Invalid musicId " + musicId); } mListener.onMetadataChanged(metadata); // locked screen and in other places. if (metadata.getDescription().getIconBitmap() == null && metadata.getDescription().getIconUri() != null) { String albumUri = metadata.getDescription().getIconUri().toString(); AlbumArtCache.getInstance().fetch(albumUri, new AlbumArtCache.FetchListener() { @Override public void onFetched(String artUrl, Bitmap bitmap, Bitmap icon) { mMusicProvider.updateMusicArt(musicId, bitmap, icon); // If we are still playing the same music, notify the listeners: MediaSessionCompat.QueueItem currentMusic = getCurrentMusic(); if (currentMusic == null) { return; } String currentPlayingId = MediaIDHelper.extractMusicIDFromMediaID(currentMusic.getDescription().getMediaId()); if (musicId.equals(currentPlayingId)) { mListener.onMetadataChanged(mMusicProvider.getMusic(currentPlayingId)); } } }); } }
14. QueueHelperTest#testGetPlayingQueueForSelectedPlayableMedia()
Project: android-UniversalMusicPlayer
File: QueueHelperTest.java
File: QueueHelperTest.java
@Test public void testGetPlayingQueueForSelectedPlayableMedia() throws Exception { MediaMetadataCompat selectedMusic = provider.getMusicsByGenre("Genre 1").iterator().next(); String selectedGenre = selectedMusic.getString(MediaMetadataCompat.METADATA_KEY_GENRE); assertEquals("Genre 1", selectedGenre); String mediaId = MediaIDHelper.createMediaID(selectedMusic.getString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID), MediaIDHelper.MEDIA_ID_MUSICS_BY_GENRE, selectedGenre); List<MediaSessionCompat.QueueItem> queue = QueueHelper.getPlayingQueue(mediaId, provider); assertNotNull(queue); assertFalse(queue.isEmpty()); // sort by music title to simplify assertions below Collections.sort(queue, new Comparator<MediaSessionCompat.QueueItem>() { @Override public int compare(MediaSessionCompat.QueueItem lhs, MediaSessionCompat.QueueItem rhs) { return String.valueOf(lhs.getDescription().getTitle()).compareTo(String.valueOf(rhs.getDescription().getTitle())); } }); // assert they are all of the expected genre for (MediaSessionCompat.QueueItem item : queue) { String musicId = MediaIDHelper.extractMusicIDFromMediaID(item.getDescription().getMediaId()); MediaMetadataCompat metadata = provider.getMusic(musicId); assertEquals(selectedGenre, metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE)); } // assert that all the tracks are what we expect assertEquals("Music 1", queue.get(0).getDescription().getTitle()); assertEquals("Music 2", queue.get(1).getDescription().getTitle()); assertEquals("Music 3", queue.get(2).getDescription().getTitle()); }
15. MusicProviderTest#testFavorite()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testFavorite() throws Exception { MediaMetadataCompat metadata = provider.getShuffledMusic().iterator().next(); String musicId = metadata.getDescription().getMediaId(); assertFalse(provider.isFavorite(musicId)); provider.setFavorite(musicId, true); assertTrue(provider.isFavorite(musicId)); provider.setFavorite(musicId, false); assertFalse(provider.isFavorite(musicId)); }
16. MusicProviderTest#testSearchMusicByArtist()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testSearchMusicByArtist() throws Exception { int count = 0; for (MediaMetadataCompat metadata : provider.searchMusicByArtist("Joe")) { String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_ARTIST); assertTrue(title.contains("Joe")); count++; } assertEquals(3, count); }
17. MusicProviderTest#testSearchMusicByAlbum()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testSearchMusicByAlbum() throws Exception { int count = 0; for (MediaMetadataCompat metadata : provider.searchMusicByAlbum("Album")) { String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_ALBUM); assertTrue(title.contains("Album")); count++; } assertEquals(5, count); }
18. MusicProviderTest#testSearchBySongTitle()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testSearchBySongTitle() throws Exception { int count = 0; for (MediaMetadataCompat metadata : provider.searchMusicBySongTitle("Romantic")) { String title = metadata.getString(MediaMetadataCompat.METADATA_KEY_TITLE); assertTrue(title.contains("Romantic")); count++; } assertEquals(2, count); }
19. MusicProviderTest#testGetMusicsByGenre()
Project: android-UniversalMusicPlayer
File: MusicProviderTest.java
File: MusicProviderTest.java
@Test public void testGetMusicsByGenre() throws Exception { int count = 0; for (MediaMetadataCompat metadata : provider.getMusicsByGenre("Genre 1")) { String genre = metadata.getString(MediaMetadataCompat.METADATA_KEY_GENRE); assertEquals("Genre 1", genre); count++; } assertEquals(3, count); }