2017-05-28 42 views
0

我读的官方文档,但我不明白什么在这个方法做:如何构建媒体项目?安卓

@Override 
public void onLoadChildren(final String parentMediaId, 
final Result<List<MediaItem>> result) { 

... 
// Assume for example that the music catalog is already loaded/cached. 

List<MediaItem> mediaItems = new ArrayList<>(); 

// Check if this is the root menu: 
if (MY_MEDIA_ROOT_ID.equals(parentMediaId)) { 

    // build the MediaItem objects for the top level, 
    // and put them in the mediaItems list 

    where is documented this part? how to build the media item? 

} else { 

    // examine the passed parentMediaId to see which submenu we're at, 
    // and put the children of that menu in the mediaItems list 
} 
... 
} 

另外,如果我想播放音乐的手机上, 如何“打造媒体项目/ s“基于手机的音乐?

回答

1

我的回应有点晚,但我希望它能帮助未来的疑虑。

在你Service.java

case MEDIA_ID_ROOT: 
       for (MediaMetadataCompat track : mMusicProvider.getAllMusics()) { 

        String mediaId = track.getDescription().getMediaId(); 
        //Artist song 
        String title = String.valueOf(track.getDescription().getTitle()); 
        //Artist name 
        String subTitle = String.valueOf(track.getDescription().getSubtitle()); 
        //Artist album 
        String descriptin = String.valueOf(track.getDescription().getDescription()); 
        //Song duration 
        Long duration = track.getLong(MediaMetadataCompat.METADATA_KEY_DURATION); 

        Bundle songDuration = new Bundle(); 
        songDuration.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration); 

        MediaDescriptionCompat desc = 
          new MediaDescriptionCompat.Builder() 
            .setMediaId(mediaId) 
            .setTitle(title) 
            .setSubtitle(subTitle) 
            .setDescription(descriptin) 
            .setExtras(songDuration) 
            .build(); 

        MediaBrowserCompat.MediaItem songList = 
          new MediaBrowserCompat.MediaItem(desc, 
            MediaBrowserCompat.MediaItem.FLAG_PLAYABLE); 
        mediaItems.add(songList); 
       } 
       break; 

mMusicProvider是我的模型

的对象在你的provider.java

// Categorized caches for music track data:          
    private final LinkedHashMap<String, MediaMetadataCompat> mMusicListById; 

public Iterable<MediaMetadataCompat> getAllMusics() { 

    if (mCurrentState != State.INITIALIZED || mMusicListById.isEmpty()) { 
     return Collections.emptyList(); 
    } 
    return mMusicListById.values(); 
} 

的MediaBrowserCompat.MediaItem基本上可以MediaId,标题, Subtitle,Description,IconBitmap,IconUri,Bundle。在我的情况下,我需要歌曲的持续时间,这就是为什么我作为一个额外的捆绑添加。您可以添加更多演员,如作曲家,年份,曲目编号等。

如果您不需要任何额外信息,则可以调用getdescription()。

for (MediaMetadataCompat track : mMusicProvider.getAllMusics()) { 
        MediaBrowserCompat.MediaItem bItem = 
          new MediaBrowserCompat.MediaItem(track.getDescription(), 
            MediaBrowserCompat.MediaItem.FLAG_PLAYABLE); 

        mediaItems.add(bItem);