我有一个“播放列表”,类型为“ ArrayList”。在我的代码中遍历此列表时,我可以轻松地检查它是否是Song,专辑,Artist,Genre的instance,并转换为正确的类型。所有类型都在android中实现了Parcelable,因此可以将它们从一个活动发送到另一个活动,但是在尝试通过广播接收器发送“播放列表”时遇到了问题。基本上,一首歌曲结束后,它将继续进行下一个项目。该项目可能是专辑,艺术家或其他内容,我的应用程序知道如何处理它,但是我需要将该列表广播到我的MainActivity中,以便在单击按钮时向用户显示播放列表。问题是它们是混合类型,所以我不能只说...
'wagtail_serve'
我尝试执行“ ArrayList ...”,但抛出错误,指出错误的数据类型。如果我执行“ ArrayList ...”,一旦拥有它们,如何将它们恢复为正常对象? 传递的额外内容将是ArrayList,其中可以包含Song,专辑,Artist或Genre。我确信有办法做到这一点,我似乎无法弄清楚。我很乐意显示代码,该代码可以制作列表并在MusicService中处理列表(如果需要)。谢谢。
UDPATE。这是我用于商品和清单的代码...
歌曲..
private BroadcastReceiver playlistUpdated = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
ArrayList<NOT SURE WHAT TO SAY HERE> tempList = intent.getParcelableArrayListExtra(MusicService.PLAY_LIST_EXTRA);
//... do more processing to add them to the base activity playlist and show
}
};
专辑,艺术家和流派几乎完全相同,只是专辑中可能有不同的键,例如专辑将有numSongs。
然后在我的MusicService中创建“播放列表”数组...
public class Song implements Parcelable {
private long id;
private String title;
private String artist;
private String album;
private String albumArtURI;
public Song(Parcel in) {
this.id = in.readLong();
this.title = in.readString();
...
}
//rest of class... getters setters, writeToParcel, and the CREATOR
}
getSongsFromAlbum或getAlbumsFromArtistWithoutAlbum的代码仅返回ArrayList或ArrayList。它使用ContentResolver来查询MediaStore.Audio。用于数据库中的媒体。像这样...
private ArrayList<Object> playlist = new ArrayList<>();
...
public void setPlayConfinedTo(Album album) {
this.album = album;
playlist.addAll(getSongsFromAlbum(album.getId());
}
public void setPlayConfinedTo(Album album, Artist artist) {
this.artist = artist;
this.album = album;
playlist.addAll(getSongsFromAlbum(album.getId());
ArrayList<Album> remainingAlbums = getAlbumsFromArtistWithoutAlbum(artist.getId(), album.getId());
if(remainingAlbums.size() > 0) {
playlist.addAll(remainingAlbums);
}
}
所以最后我有了一个ArrayList,其中可以将Album,Artist,Song或Genre作为对象。