【问题标题】:Universal Android Media Player - UAMP通用 Android 媒体播放器 - UAMP
【发布时间】:2016-02-26 20:13:28
【问题描述】:

我正在使用通用 Android 媒体播放器示例作为另一个应用程序的基础。为了我的爱,我无法弄清楚如何更新 MusicService 使用的 MusicProvider(即更改队列中的歌曲)。 这将在用户单击随机项目时完成 - 服务将提供一个新列表以供播放。

有什么想法吗? - 原文出处:https://github.com/googlesamples/android-UniversalMusicPlayer

我已经创建了新的 MusicProvider,我要如何将它提供给服务。

【问题讨论】:

    标签: android media-player playback


    【解决方案1】:

    我认为您需要修改 model/RemoteJSONSource.java 以便将 MediaMetadataCompat 项添加到 tracks ArrayList 中。

    您需要创建一个用于创建 MediaMetadataCompat 对象的“buildFromJSON”方法。请务必设置尽可能多的媒体属性。

    Google 示例显示了从远程 JSON 源添加的媒体。 就我而言,我已经将远程 Firebase JSON 加载到本地 SQLite 数据库。所以我改为从 SQLite 加载我的媒体。为此,我修改了 buildFromJsonbuildFromEpisodesCursor 并适当地改变了胆量。 (如果媒体发生变化,Firebase 可以向 SQLite 发送 JSON 更新。)这是一个带有关键代码块的 sn-p:

    public class RemoteJSONSource implements MusicProviderSource {
    
        @Override
        public Iterator<MediaMetadataCompat> iterator() {
            ArrayList<MediaMetadataCompat> tracks = new ArrayList<>();
            EpisodesCursor episodesCursor = getEpisodes();
            if (episodesCursor != null) {
                while (episodesCursor.moveToNext()) {
                    tracks.add(buildFromEpisodesCursor(episodesCursor));
                }
                episodesCursor.close();
            }
            return tracks.iterator();
        }
    
        private MediaMetadataCompat buildFromEpisodesCursor(EpisodesCursor episodesCursor) {
    
            // INITIALIZE THE VARIOUS MEDIA DATA ITEMS YOU NEED HERE (ommitted)
    
            MediaMetadataCompat theMetadata = new MediaMetadataCompat.Builder()
                    .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, id)
                    .putString(MusicProviderSource.CUSTOM_METADATA_TRACK_SOURCE, episodeDownloadUrl)
                    .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, episodeTitle)
                    .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
                    .putString(MediaMetadataCompat.METADATA_KEY_WRITER, episodeWriter)
                    .putLong(MediaMetadataCompat.METADATA_KEY_DURATION, duration)
                    .putString(MediaMetadataCompat.METADATA_KEY_DATE, airdate)
                    .putLong(MediaMetadataCompat.METADATA_KEY_YEAR, airdate_year)
                    .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre)
                    .putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, iconBitmap)
                    .putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, iconUrl)
                    .putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, episodeTitle)
                    .putString(MediaMetadataCompat.METADATA_KEY_TITLE, episodeTitle)
                    .putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_DESCRIPTION, episodeDescription)
                    .putLong(MediaMetadataCompat.METADATA_KEY_TRACK_NUMBER, episodeNumber)
                    .putLong(MediaMetadataCompat.METADATA_KEY_NUM_TRACKS, totalTrackCount)
                    .putRating(MediaMetadataCompat.METADATA_KEY_RATING, ratingCompat)
                    .build();
    
            return theMetadata;
        }
    
        ...
    
    }
    

    带有关键模式的 uTube 视频:

    https://www.youtube.com/watch?v=iIKxyDRjecU

    https://www.youtube.com/watch?v=XQwe30cZffg

    https://www.youtube.com/watch?v=FBC1FgWe5X4&utm_campaign=adp_series_mediabrowserservicecompat_030116&utm_source=medium&utm_medium=blog

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多