C# 可以使用MediaElement的源属性播放内容吗?

C# 可以使用MediaElement的源属性播放内容吗?,c#,xaml,windows-runtime,C#,Xaml,Windows Runtime,我正在尝试使用歌曲的目录路径从本地计算机播放歌曲 MediaElement.Source = new Uri(@"D:\Music\Artist\Album\Song.mp3", UriKind.Absolute); 这是否可能开始工作,或者Windows 8应用程序是否只能使用诸如mss appx:之类的URI方案来访问软件包数据 当我尝试运行代码时,我在MediaElement控件上收到一条消息“源代码无效”您需要使用文件打开选择器在D驱动器中选择一个文件 FileOpenPick

我正在尝试使用歌曲的目录路径从本地计算机播放歌曲

MediaElement.Source = new Uri(@"D:\Music\Artist\Album\Song.mp3", UriKind.Absolute);
这是否可能开始工作,或者Windows 8应用程序是否只能使用诸如mss appx:之类的URI方案来访问软件包数据


当我尝试运行代码时,我在MediaElement控件上收到一条消息“源代码无效”

您需要使用文件打开选择器在D驱动器中选择一个文件

    FileOpenPicker openPicker = new FileOpenPicker();

    openPicker.ViewMode = PickerViewMode.Thumbnail;

    openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;

    openPicker.FileTypeFilter.Add(".mp3");

    StorageFile file = await openPicker.PickSingleFileAsync();

    IRandomAccessStreamWithContentType content = await file.OpenReadAsync();

    Debug.WriteLine("Content Type: " + content.ContentType);

    player.SetSource(content, content.ContentType);

Windows应用商店应用程序没有对文件系统的完全访问权限。他们只能直接访问(通过路径)有限的位置(即安装和应用程序数据文件夹)

MediaElement可以从它可以直接访问的路径加载项,但这通常不有用,因为这些位置具有URI(ms appx:和ms appdata:),无论实际路径是什么,URI都将指向正确的位置

通常歌曲在音乐库中,MediaElement无法直接访问。它可以通过MusicLibrary功能获得代理访问,但不允许通过路径访问。应用程序需要通过KnownFolders对象访问文件:

private async void Button_Click(object sender, RoutedEventArgs e)
{
    StorageFolder musicLib = Windows.Storage.KnownFolders.MusicLibrary;
    StorageFile song = await musicLib.GetFileAsync(@"Artist\Album\Song.mp3");
    var stream = await song.OpenReadAsync();
    me.SetSource(stream, stream.ContentType);
}
如果歌曲不在功能允许的库中,则用户需要通过FolderPicker或类似的方式授予权限。用户可以选择音乐位置的根目录,应用程序可以使用Windows.Storage.AccessCache类对其进行缓存,因此用户无需多次选择文件夹或单独选择文件

我在我的博客中对此进行了更详细的讨论


假设文件路径确实存在,您提供的代码应该在Windows 7中工作。看起来您尚未发布引发异常的实际代码。商店应用程序只能访问某些特殊文件夹。看,我相信你的博客刚刚证实了这个问题。谢谢
MediaElement.Source = new Uri("ms-appx-web:///Assets/Song.mp3", UriKind.Absolute);