在我的ListView
中播放了最后一首歌之后,我正在努力自动播放下一首歌
我有一个ListView
,可显示带有专辑,专辑封面和标题的所有歌曲,单击歌曲时将播放该歌曲,但是移至下一首歌曲时,它将再次播放第一首歌曲。即使我单击列表中的下一首歌曲,它也会再次播放第一首歌曲?
我真的很为难。
这是我的代码:
private async Task InitFolderAsync()
{
StorageFolder musicLib = KnownFolders.MusicLibrary;
var files = await musicLib.GetFilesAsync();
foreach (var file in files)
{
StorageItemThumbnail currentThumb = await file.GetThumbnailAsync(ThumbnailMode.MusicView, 50, ThumbnailOptions.UseCurrentScale);
var albumCover = new BitmapImage();
albumCover.SetSource(currentThumb);
var musicProperties = await file.Properties.GetMusicPropertiesAsync();
var musicname = musicProperties.Title;
var musicdur = musicProperties.Duration;
var artist = musicProperties.Artist;
if (artist == "")
{
artist = "Unknown";
}
var album = musicProperties.Album;
if (album == "")
{
album = "Unkown";
}
MusicList.Add(new MusicLib
{
FileName = musicname,
Artist = artist,
Album = album,
Duration = musicdur,
AlbumCover = albumCover,
MusicPath = file.Path
});
}
}
private async void SongClicked(object sender, ItemClickEventArgs e)
{
var file = await KnownFolders.MusicLibrary.GetFileAsync(e.ClickedItem.ToString());
if (file != null)
{
var stream = await file.OpenReadAsync();
mediaElement.SetSource(stream, file.ContentType);
mediaElement.Play();
}
}
private async void objMediaPlayer_MediaEnded(object sender, RoutedEventArgs e)
{
// If the end of the ListView is reached and the last song was played stop.
if ((AudioFilesLV.SelectedIndex + 1) == AudioFilesLV.Items.Count)
{
mediaElement.Stop();
}
else
{
// This line you should try to change. When the last song was not played
//-> select next one and play them.
AudioFilesLV.SelectedIndex = AudioFilesLV.SelectedIndex + 1;
var file = await KnownFolders.MusicLibrary.GetFileAsync(AudioFilesLV.SelectedItem.ToString());
if (file != null)
{
var stream = await file.OpenReadAsync();
mediaElement.SetSource(stream, file.ContentType);
mediaElement.Play();
}
}
}
private void objMediaPlayer_MediaOpened(object sender, RoutedEventArgs e)
{
mediaElement.Play();
}
答案 0 :(得分:0)
很难说为什么它不能与您提供的代码一起使用。在我看来,它应该可以工作。也许由于某种原因,您在GetFileAsync方法中得到的是同一个文件,而不是新文件。无论如何,我建议您不要使用过时的MediaElement自己处理播放列表,而建议您将MediaPlayerElement和内置组件MediaPlaybackList甚至MediaPlayer本身与MediaPlaybackList一起使用。您可以在https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/media-playback-with-mediasource上阅读有关MediaPlaybackList的信息。