BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用

Posted

技术标签:

【中文标题】BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用【英文标题】:BackgroundMediaPlayer not working in Windows Phone 8.1 【发布时间】:2015-03-11 04:01:33 【问题描述】:

我已经建立了一个 Windows Phone 项目及其关联的 BackgroundTask 项目,并且还按照this article 中的说明完成了所需的声明。

我需要从应用程序 UI(从音乐库)中选择一个音频文件,并将其分配给 BackgroundMediaPlayer 来播放它,这样歌曲就可以在 UI 处于前台时播放,也可以在前台播放时播放暂停或屏幕被锁定。

我尝试了以下方法,但它不起作用:

从 UI 设置文件路径:

StorageFile file = (await KnownFolders.MusicLibrary.GetFileAsync(
"Song from Music Library.mp3"));
BackgroundMediaPlayer.Current.SetUriSource(new System.Uri(file.Path, 
UriKind.RelativeOrAbsolute));
BackgroundMediaPlayer.Current.Play();

结果:没有播放音频。不会抛出异常。

将文件路径作为字符串传递给后台任务,从音乐库中搜索文件并播放:

IReadOnlyList<StorageFile> songs = await 
KnownFolders.MusicLibrary.GetFilesAsync(CommonFileQuery.OrderByName);
StorageFile fileToPlay = songs.AsQueryable().Single(
s => s.Path == toPlay);
BackgroundMediaPlayer.Current.SetFileSource(fileToPlay); 

结果:调试器在“StorageFile fileToPlay = song.AsQueryable().Single(s => s.Path == toPlay);”之后没有前进。它就停在那里。 同样,没有播放音频。不会抛出异常。

感谢您的帮助。

【问题讨论】:

你的BackgroundPlayer启动了吗?你调试了吗? 是的.. 我发现了这个问题。 BackgroundMediaPlayer 初始化没有发生。它现在可以工作,但有时会抛出此异常:“后台音频任务未在预期时间启动”是因为 BackgroundMediaPlayer 启动需要一些延迟时间吗? 任务未启动的原因可能有很多——您的代码可能由于系统策略或其他原因而关闭。注意不要同时开始两个任务。 【参考方案1】:

BackgroundMediaPlayer set Uri source of Media library item

StorageFile file = (await KnownFolders.MusicLibrary.GetFilesAsync()).FirstOrDefault();
BackgroundMediaPlayer.Current.SetUriSource(new Uri(file.Path, UriKind.RelativeOrAbsolute));

查看答案。

【讨论】:

以上是关于BackgroundMediaPlayer 在 Windows Phone 8.1 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

UWP 后台音频失败,因为 RPC 服务器不可用

适用于 Windows Phone 8.1 的后台媒体播放器中的无缝循环

w和r在一起w不发音

是 w | w <> w^R 在字母表 0,1 上是一种上下文无关的语言?

正则表达式的区别: (\w+)?和 (\w*)

如何在 VC++ 中使用 _W64 和 __w64?