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