最后一首歌播放完UWP后如何自动播放下一首歌

时间:2020-06-15 11:31:36

标签: c# uwp

在我的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();
    }

1 个答案:

答案 0 :(得分:0)

很难说为什么它不能与您提供的代码一起使用。在我看来,它应该可以工作。也许由于某种原因,您在GetFileAsync方法中得到的是同一个文件,而不是新文件。无论如何,我建议您不要使用过时的MediaElement自己处理播放列表,而建议您将MediaPlayerElement和内置组件MediaPlaybackList甚至MediaPlayer本身与MediaPlaybackList一起使用。您可以在https://docs.microsoft.com/en-us/windows/uwp/audio-video-camera/media-playback-with-mediasource上阅读有关MediaPlaybackList的信息。