繁体   English   中英

MediaElement可在WPF中工作,但不能在Windows 8.1 App中工作

[英]MediaElement working within WPF but not within Windows 8.1 App

下面显示的播放音频文件的代码在我的WPF应用程序中可以正常运行。 但是,当我在Windows 8.1应用程序中执行相同的代码时,没有任何异常,但也没有声音。 有人可以帮忙吗?

private void myMediaElement_MediaOpened(object sender, RoutedEventArgs e)
{
    myMediaElement.Source =
        new Uri(@"C:\Users\Soph\Music\Addicted.mp3", UriKind.Absolute);
    myMediaElement.Play();
}

private void btn1_Click(object sender, RoutedEventArgs e)
{
    myMediaElement_MediaOpened(sender,e);
}

编辑:

我已根据建议添加了mediaFailed事件(来自http://msdn.microsoft.com/zh-cn/library/windows/apps/windows.ui.xaml.controls.mediaelement.mediafailed

    private string GetHresultFromErrorMessage(ExceptionRoutedEventArgs e)
    {
        String hr = String.Empty;
        String token = "HRESULT - ";
        const int hrLength = 10;     // eg "0xFFFFFFFF"

        int tokenPos = e.ErrorMessage.IndexOf(token, StringComparison.Ordinal);
        if (tokenPos != -1)
        {
            hr = e.ErrorMessage.Substring(tokenPos + token.Length, hrLength);
        }

        return hr;
    }

    private void mycontrol_MediaFailed(object sender, ExceptionRoutedEventArgs e)
    {
        // get HRESULT from event args 
        string hr = GetHresultFromErrorMessage(e);

        // Handle media failed event appropriately 
    }

然后我尝试调试此:

名称值类型

此{PracMEWindowsApp.MainPage} PracMEWindowsApp.MainPage e {Windows.UI.Xaml.ExceptionRoutedEventArgs} Windows.UI.Xaml.ExceptionRoutedEventArgs hr“ 0x80070003”字符串令牌“ HRESULT-”字符串tokenPos 40 int hrLength 10 int

这个小时捕获了什么? 为什么我的文件没有播放?

要访问音乐库,请在应用清单中指定“音乐库”功能。 始终处理MediaFailed事件也是一个好习惯。

HRESULT 0x80070003是“找不到目录”。 这表明media元素不喜欢有关文件路径的内容。 如果收到HRESULT 0x80070005(拒绝访问),则可能与权限相关。

Windows Store应用程序无权访问本地文件系统中的文件,它在沙盒环境中运行,并且只能访问其自己的数据文件夹,无法识别C:\\Users\\Soph\\Music\\Addicted.mp3这样的路径。

有几种播放媒体文件的方法。

Package.appxmanifest指定“音乐库”功能(这是必需的),然后

private async void btn1_Click(object sender, RoutedEventArgs e)
{
    var file = await Windows.Storage.KnownFolders.MusicLibrary.GetFileAsync("Addicted.mp3");
    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
    myMediaElement.SetSource(stream, file.ContentType);
}

要么

b。 使用FileOpenPicker ,手动选择歌曲,您可以访问文件系统中的任何.mp3文件。

private async void btn1_Click(object sender, RoutedEventArgs e)
{
    FileOpenPicker openPicker = new FileOpenPicker();
    openPicker.FileTypeFilter.Add(".mp3");
    openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;
    var file = await openPicker.PickSingleFileAsync();
    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
    myMediaElement.SetSource(stream, file.ContentType);
}

要么

C。 将Addicted.mp3添加到您的项目,然后

Uri uri = new Uri("ms-appx:///Addicted.mp3");
myMediaElement.Source = uri;

您还可以在XAML中进行设置

<MediaElement x:Name="myMediaElement" Source="Addicted.mp3" />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM