Java Universal Music Player表示加载媒体时出错

Java Universal Music Player表示加载媒体时出错,java,android,json,audio-player,android-music-player,Java,Android,Json,Audio Player,Android Music Player,我使用的是通用音乐播放器(UMP)谷歌提供的示例代码 在这里,我想根据我的要求定制一件东西,但UMP仍在以下过程中工作: Screen 1: Genres (Songs by genre) Screen 2: List of Genres Screen 3: List of Songs (under particular Genre) 现在,这是我的要求: 我不需要屏幕1:流派(按流派排列的歌曲),我想直接从屏幕2启动我的应用程序(即:流派列表屏幕) 为了实现我的目标,我在MusicSe

我使用的是
通用音乐播放器(UMP)
谷歌提供的示例代码

在这里,我想根据我的
要求
定制
一件东西
,但
UMP
仍在以下过程中工作:

Screen 1: Genres (Songs by genre)

Screen 2: List of Genres

Screen 3: List of Songs (under particular Genre) 
现在,这是我的
要求

我不需要
屏幕1:流派(按流派排列的歌曲)
,我想直接从
屏幕2
启动我的应用程序(即:
流派列表
屏幕)

为了实现我的目标,我在
MusicService.java
类中做了一个小改动

我已将以下代码替换为

/**
     * Actual implementation of onLoadChildren that assumes that MusicProvider is already
     * initialized.
     */
    private void loadChildrenImpl(final String parentMediaId,
                                  final Result<List<MediaBrowser.MediaItem>> result) {
        LogHelper.d(TAG, "OnLoadChildren: parentMediaId=", parentMediaId);

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

        if (MEDIA_ID_ROOT.equals(parentMediaId)) {
            LogHelper.d(TAG, "OnLoadChildren.ROOT");
            mediaItems.add(new MediaBrowser.MediaItem(
                    new MediaDescription.Builder()
                        .setMediaId(MEDIA_ID_MUSICS_BY_GENRE)
                        .setTitle(getString(R.string.browse_genres))
                        .setIconUri(Uri.parse("android.resource://" +
                                "com.example.android.uamp/drawable/ic_by_genre"))
                        .setSubtitle(getString(R.string.browse_genre_subtitle))
                        .build(), MediaBrowser.MediaItem.FLAG_BROWSABLE
            ));

        } else if (MEDIA_ID_MUSICS_BY_GENRE.equals(parentMediaId)) {
            LogHelper.d(TAG, "OnLoadChildren.GENRES");
            for (String genre : mMusicProvider.getGenres()) {
                MediaBrowser.MediaItem item = new MediaBrowser.MediaItem(
                    new MediaDescription.Builder()
                        .setMediaId(createBrowseCategoryMediaID(MEDIA_ID_MUSICS_BY_GENRE, genre))
                        .setTitle(genre)
                        .setSubtitle(getString(R.string.browse_musics_by_genre_subtitle, genre))
                        .build(), MediaBrowser.MediaItem.FLAG_BROWSABLE
                );
                mediaItems.add(item);
            }

        } else if (parentMediaId.startsWith(MEDIA_ID_MUSICS_BY_GENRE)) {
            String genre = MediaIDHelper.getHierarchy(parentMediaId)[1];
            LogHelper.d(TAG, "OnLoadChildren.SONGS_BY_GENRE  genre=", genre);
            for (MediaMetadata track : mMusicProvider.getMusicsByGenre(genre)) {
                // 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 hierarchyAwareMediaID = MediaIDHelper.createMediaID(
                        track.getDescription().getMediaId(), MEDIA_ID_MUSICS_BY_GENRE, genre);
                MediaMetadata trackCopy = new MediaMetadata.Builder(track)
                        .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, hierarchyAwareMediaID)
                        .build();
                MediaBrowser.MediaItem bItem = new MediaBrowser.MediaItem(
                        trackCopy.getDescription(), MediaItem.FLAG_PLAYABLE);
                mediaItems.add(bItem);
            }
        } else {
            LogHelper.w(TAG, "Skipping unmatched parentMediaId: ", parentMediaId);
        }
        LogHelper.d(TAG, "OnLoadChildren sending ", mediaItems.size(),
                " results for ", parentMediaId);
        result.sendResult(mediaItems);
    }
当我启动我的应用程序而不是
类型列表
时,我收到一条
消息
,上面写着:
“错误加载媒体”


那么
哪里出了问题
在这里,
我必须在代码中进行更改
要直接获取流派列表

问题是UMP仍然使用
parentMediaId==\uuuuu ROOT\uuuu
调用
loadChildrenImpl()

因此,它在if-else语句中找不到合适的case,并以

LogHelper.w(TAG, "Skipping unmatched parentMediaId: ", parentMediaId);
并返回
媒体项
(这会导致“加载媒体时出错”错误)

修复程序位于
MusicService
类中的
onGetRoot()
方法替换中

    return new BrowserRoot(MEDIA_ID_ROOT, null);


在这里发布您的完整stacktrace谢谢:)我犯了一个错误,我没有阅读onGetRoot()方法,我勾选了您的答案作为有用的,并接受了,将在18小时后奖励您。。。我可以知道吗,为什么我对流派不感兴趣?@Sophie,不客气。关于拇指,在
for(字符串类型:mMusicProvider.getGenres()){}
中,您必须为每个类型调用
.setIconUri()
(即,要在本地拥有所有图像),我afraid@Sophie我很赞同伊维特女士的想法,即等待一点赏金:-)
    return new BrowserRoot(MEDIA_ID_ROOT, null);
    return new BrowserRoot(MEDIA_ID_MUSICS_BY_GENRE, null);