.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, Uri.parse(mediaId).toString()) .build(); final MediaItem mediaItem = new MediaItem(metadataCompat.getDescription(), flag); mediaItems.put(mediaId, mediaItem);
/** * This differs from real Android search logic. Search results will contain all {@link * MediaItem}'s with a title that {@param query} is a substring of. */ @Implementation protected void search( @NonNull final String query, final Bundle extras, @NonNull SearchCallback callback) { if (isConnected) { final List<MediaItem> searchResults = new ArrayList<>(); for (MediaItem item : mediaItems.values()) { final String mediaTitle = item.getDescription().getTitle().toString().toLowerCase(); if (mediaTitle.contains(query.toLowerCase())) { searchResults.add(item); } } handler.post(() -> callback.onSearchResult(query, extras, searchResults)); } else { handler.post(() -> callback.onError(query, extras)); } }
mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(MEDIA_ID_SHUFFLEDPLAY) .build(), MediaBrowserCompat.MediaItem.FLAG_BROWSABLE )); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(MEDIA_ID_COLLECTION) .build(), MediaBrowserCompat.MediaItem.FLAG_BROWSABLE )); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(MEDIA_ID_PLAYLISTS) .build(), MediaBrowserCompat.MediaItem.FLAG_BROWSABLE )); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(MEDIA_ID_STATIONS) result.sendResult(mediaItems); } else if (MEDIA_ID_SHUFFLEDPLAY.equals(parentId)) { mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(MEDIA_ID_SHUFFLEDPLAY_FAVORITES) .build(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, Uri.parse(mediaId).toString()) .build(); final MediaItem mediaItem = new MediaItem(metadataCompat.getDescription(), flag); mediaItems.put(mediaId, mediaItem);
@Override public void onDone(User user) { for (int i = 0; i < user.getPlaylists().size(); i++) { Playlist playlist = user.getPlaylists().get(i); String topArtistsString = ""; String[] artists = playlist.getTopArtistNames(); if (artists != null) { for (int j = 0; j < artists.length && j < 5; j++) { topArtistsString += artists[j]; if (j != artists.length - 1) { topArtistsString += ", "; } } } String mediaId = buildMediaId(MEDIA_ID_PLAYLISTS, playlist.getCacheKey()); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(mediaId) .setTitle(playlist.getName()) .setSubtitle(topArtistsString) .build(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE )); } result.sendResult(mediaItems); } });
private void loadChildren(@NonNull final String parentMediaId, final Result<List<MediaBrowserCompat.MediaItem>> result) { List<MediaBrowserCompat.MediaItem> mediaItems = new ArrayList<>(); switch (parentMediaId) { case MEDIA_ID_ROOT: for (MediaMetadataCompat track : mStationListProvider.getAllStations()) { MediaBrowserCompat.MediaItem item = new MediaBrowserCompat.MediaItem(track.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE); mediaItems.add(item); } break; case MEDIA_ID_EMPTY_ROOT: // since the client provided the empty root we'll just send back an empty list break; default: LogHelper.w(LOG_TAG, "Skipping unmatched parentMediaId: " + parentMediaId); break; } result.sendResult(mediaItems); }
/** * This differs from real Android search logic. Search results will contain all {@link * MediaItem}'s with a title that {@param query} is a substring of. */ @Implementation protected void search( @NonNull final String query, final Bundle extras, @NonNull SearchCallback callback) { if (isConnected) { final List<MediaItem> searchResults = new ArrayList<>(); for (MediaItem item : mediaItems.values()) { final String mediaTitle = item.getDescription().getTitle().toString().toLowerCase(); if (mediaTitle.contains(query.toLowerCase())) { searchResults.add(item); } } handler.post(() -> callback.onSearchResult(query, extras, searchResults)); } else { handler.post(() -> callback.onError(query, extras)); } }
@Override public void onDone(CollectionCursor<Album> albums) { for (int i = 0; i < albums.size(); i++) { Album album = albums.get(i); String mediaId = buildMediaId(MEDIA_ID_COLLECTION_ALBUMS, album.getCacheKey()); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(mediaId) .setTitle(album.getPrettyName()) .setSubtitle(album.getArtist().getPrettyName()) .build(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE )); } albums.close(); result.sendResult(mediaItems); } });
@Override public void onDone(CollectionCursor<Artist> artists) { for (int i = 0; i < artists.size(); i++) { Artist artist = artists.get(i); String mediaId = buildMediaId(MEDIA_ID_COLLECTION_ARTISTS, artist.getCacheKey()); mediaItems.add(new MediaBrowserCompat.MediaItem( new MediaDescriptionCompat.Builder() .setMediaId(mediaId) .setTitle(artist.getPrettyName()) .build(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE )); } artists.close(); result.sendResult(mediaItems); } });
@Override protected void onChildrenLoaded(@NonNull String parentId, @NonNull List<MediaBrowserCompat.MediaItem> children) { super.onChildrenLoaded(parentId, children); final MediaControllerCompat mediaController = getMediaController(); // Queue up all media items for this simple sample. for (final MediaBrowserCompat.MediaItem mediaItem : children) { mediaController.addQueueItem(mediaItem.getDescription()); } // Call prepare now so pressing play just works. mediaController.getTransportControls().prepare(); } }
@Override public void onLoadChildren(@NonNull final String parentMediaId, @NonNull final Result<List<MediaBrowserCompat.MediaItem>> result) { Log.d(TAG, "OnLoadChildren.ROOT"); List<MediaBrowserCompat.MediaItem> mediaItems = new ArrayList<>(); MediaDescriptionCompat description = new MediaDescriptionCompat.Builder() .setMediaId("__ALBUMS__") .setTitle("test") .build(); mediaItems.add(new MediaBrowserCompat.MediaItem(description, MediaBrowserCompat.MediaItem.FLAG_BROWSABLE)); result.sendResult(mediaItems); } }
/** * 获取 List#MediaBrowserCompat.MediaItem 用于 onLoadChildren 回调 */ public List<MediaBrowserCompat.MediaItem> getChildrenResult(String mediaId) { List<MediaBrowserCompat.MediaItem> mediaItems = new ArrayList<>(); for (MediaMetadataCompat metadata : metadatas) { MediaBrowserCompat.MediaItem mediaItem = new MediaBrowserCompat.MediaItem( metadata.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE); mediaItems.add(mediaItem); } return mediaItems; }
public static List<MediaBrowserCompat.MediaItem> getMediaItems() { List<MediaBrowserCompat.MediaItem> result = new ArrayList<>(); for (MediaMetadataCompat metadata : music.values()) { result.add( new MediaBrowserCompat.MediaItem( metadata.getDescription(), MediaBrowserCompat.MediaItem.FLAG_PLAYABLE)); } return result; }