[英]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.