Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通用安卓媒体播放器-UAMP_Android_Media Player_Playback - Fatal编程技术网

Android 通用安卓媒体播放器-UAMP

Android 通用安卓媒体播放器-UAMP,android,media-player,playback,Android,Media Player,Playback,我正在使用Universal Android Media Player示例作为另一个应用程序的基础。看在我的份上,我不知道如何更新MusicService使用的MusicProvider(即更改队列中的歌曲)。 这是在用户点击一个随机项目时完成的——该服务将提供一个新的列表供用户播放 有什么想法吗原始来源位于此处: 我已经创建了新的MusicProvider,我要问的是如何将其应用到服务中。我认为您需要修改模型/RemoteJSONSource.java,以便它将MediaMetadataCom

我正在使用Universal Android Media Player示例作为另一个应用程序的基础。看在我的份上,我不知道如何更新MusicService使用的MusicProvider(即更改队列中的歌曲)。 这是在用户点击一个随机项目时完成的——该服务将提供一个新的列表供用户播放

有什么想法吗原始来源位于此处:


我已经创建了新的MusicProvider,我要问的是如何将其应用到服务中。

我认为您需要修改模型/RemoteJSONSource.java,以便它将MediaMetadataCompat项添加到曲目ArrayList中

您需要创建一个“buildFromJSON”方法来创建一个MediaMetadataCompat对象。确保设置尽可能多的媒体属性

Google示例显示了从远程JSON源添加的媒体。 在我的例子中,我已经将远程Firebase JSON加载到本地SQLite中 数据库因此,我从SQLite加载媒体。为此,我修改了 buildFromJson是BuildFromEpiodesCursor,并适当地更改了guts。(如果媒体发生变化,Firebase可以向SQLite发送JSON更新。)下面是一个包含关键代码块的代码片段:

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;
    }

    ...

}
公共类RemoteJSONSource实现MusicProviderSource{
@凌驾
公共迭代器迭代器(){
ArrayList轨迹=新建ArrayList();
EpiodesCursor EpiodesCursor=GetSpices();
如果(光标!=null){
while(eposodescursor.moveToNext()){
添加(buildFromEpiodesCursor(EpiodesCursor));
}
幕式光标。关闭();
}
return tracks.iterator();
}
私有MediaMetadataCompat BuildFromEpiodesCursor(EpiodesCursor EpiodesCursor){
//在此处初始化所需的各种媒体数据项(ommitted)
MediaMetadataCompat theMetadata=新的MediaMetadataCompat.Builder()
.putString(mediatedatacompat.METADATA\u KEY\u MEDIA\u ID,ID)
.putString(MusicProviderSource.CUSTOM_METADATA_TRACK_SOURCE,eposodeDownloadURL)
.putString(MediaMetadataCompat.METADATA\u KEY\u相册,插曲标题)
.putString(MediaMetadataCompat.METADATA\u KEY\u艺术家,艺术家)
.putString(MediaMetadataCompat.METADATA\u KEY\u WRITER,EpiosodeWriter)
.putLong(MediaMetadataCompat.METADATA\u KEY\u持续时间,持续时间)
.putString(MediaMetadataCompat.METADATA\u KEY\u DATE,airdate)
.putLong(MediaMetadataCompat.METADATA\u KEY\u YEAR,airdate\u YEAR)
.putString(MediaMetadataCompat.METADATA\u KEY\u流派,流派)
.putBitmap(MediaMetadataCompat.METADATA\u键\u显示\u图标,iconBitmap)
.putString(MediaMetadataCompat.METADATA\u KEY\u ALBUM\u ART\u URI,iconUrl)
.putString(MediaMetadataCompat.METADATA\u键\u显示\u标题,eposodeTitle)
.putString(MediaMetadataCompat.METADATA\u KEY\u TITLE,eposodeTitle)
.putString(MediaMetadataCompat.METADATA\u KEY\u DISPLAY\u DESCRIPTION,eposodeDescription)
.putLong(MediaMetadataCompat.METADATA\u KEY\u TRACK\u NUMBER,eposodeNumber)
.putLong(MediaMetadataCompat.METADATA\u KEY\u NUM\u曲目,totalTrackCount)
.putRating(MediaMetadataCompat.METADATA\u KEY\u RATING,ratingCompat)
.build();
返回元数据;
}
...
}
具有关键模式的uTube视频:


我认为您需要修改模型/RemoteJSONSource.java,以便它将MediaMetadataCompat项添加到曲目中

您需要创建一个“buildFromJSON”方法来创建一个MediaMetadataCompat对象。确保设置尽可能多的媒体属性

Google示例显示了从远程JSON源添加的媒体。 在我的例子中,我已经将远程Firebase JSON加载到本地SQLite中 数据库因此,我从SQLite加载媒体。为此,我修改了 buildFromJson是BuildFromEpiodesCursor,并适当地更改了guts。(如果媒体发生变化,Firebase可以向SQLite发送JSON更新。)下面是一个包含关键代码块的代码片段:

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;
    }

    ...

}
公共类RemoteJSONSource实现MusicProviderSource{
@凌驾
公共迭代器迭代器(){
ArrayList轨迹=新建ArrayList();
EpiodesCursor EpiodesCursor=GetSpices();
如果(光标!=null){
while(eposodescursor.moveToNext()){
添加(buildFromEpiodesCursor(EpiodesCursor));
}
幕式光标。关闭();
}
return tracks.iterator();
}
私有MediaMetadataCompat BuildFromEpiodesCursor(EpiodesCursor EpiodesCursor){
//在此处初始化所需的各种媒体数据项(ommitted)
MediaMetadataCompat theMetadata=新的MediaMetadataCompat.Builder()
.putString(mediatedatacompat.METADATA\u KEY\u MEDIA\u ID,ID)
.putString(MusicProviderSource.CUSTOM_METADATA_TRACK_SOURCE,eposodeDownloadURL)
.putString(MediaMetadataCompat.METADATA\u KEY\u相册,插曲标题)
.putString(MediaMetadataCompat.METADATA\u KEY\u艺术家,艺术家)
.putString(MediaMetadataCompat.METADATA\u KEY\u WRITER,EpiosodeWriter)
.putLong(MediaMetadataCompat.METADATA\u KEY\u持续时间,持续时间)
.putString(MediaMetadataCompat.METADATA\u KEY\u DATE,airdate)
.putLong(MediaMetadataCompat.METADATA\u KEY\u YEAR,airdate\u YEAR)
.putString(MediaMetadataCompat.METADATA\u KEY\u流派,流派)
.putBitmap(MediaMetadataCompat.METADATA\u键\u显示\u图标,iconBitmap)
.putString(MediaMetadataCompat.METADATA\u KEY\u ALBUM\u ART\u URI,iconUrl)
.putString(MediaMetadataCompat.METADATA\u KEY\u显示