Windows 8.1 背景音频播放器在应用程序的其他页面中不起作用
Posted
技术标签:
【中文标题】Windows 8.1 背景音频播放器在应用程序的其他页面中不起作用【英文标题】:Windows 8.1 background audio player don't work in another page in the app 【发布时间】:2014-08-28 12:32:36 【问题描述】:我有一个应用程序可以从互联网传输音频,媒体元素在主页中,它在其中运行良好,当应用程序在后台时,我在应用程序中有多个页面,而导航从主页到另一个页面,当我返回主页时,音频停止并恢复工作。 有什么办法让它在应用程序的其他页面中工作??
【问题讨论】:
【参考方案1】:我为 windows 和 windows phone 编写音板。
为包含媒体元素的框架创建应用范围的样式。现在框架可以播放声音,在页面之间导航不会影响声音。
现在媒体元素位于框架上,页面需要以某种方式引用该媒体元素。我创建了一个公共课程来提供帮助。然后每个页面注册到这个类来播放声音。
在页面中:
SoundPlayer.Instance.Initialize();
SoundPlayer 类:
public void Initialize()
// Register media elements to the Sound Service.
try
DependencyObject rootGrid = VisualTreeHelper.GetChild(Window.Current.Content, 0);
var foregroundPlayer = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 0) as MediaElement;
var backgroundPlayer = (MediaElement)VisualTreeHelper.GetChild(rootGrid, 1) as MediaElement;
SoundPlayer.ForegroundPlayer = foregroundPlayer;
// Keep the state.
var isMuted = this.IsBackgroundMuted;
SoundPlayer.BackgroundPlayer = backgroundPlayer;
this.IsBackgroundMuted = isMuted;
catch (Exception)
// Most probably you forgot to apply the custom root frame style.
SoundPlayer.ForegroundPlayer = null;
SoundPlayer.BackgroundPlayer = null;
public async Task Play(string soundPath, bool inBackground = false)
var mediaElement = inBackground ? BackgroundPlayer : ForegroundPlayer;
if (mediaElement == null)
return;
mediaElement.Source = new Uri(soundPath);
await mediaElement.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
mediaElement.Stop();
mediaElement.Play();
);
在 App.xaml 中
<ResourceDictionary>
<Style x:Key="RootFrameStyle"
TargetType="Frame">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Frame">
<Grid>
<!-- Foreground Player -->
<MediaElement IsLooping="False" />
<!-- Background Player -->
<MediaElement IsLooping="True" />
<Grid>
<ContentPresenter />
</Grid>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
这是一篇更详细地解释了这一点的博文。 http://blogs.u2u.be/diederik/post/2014/07/10/Playing-sounds-in-a-Universal-Windows-MVVM-app.aspx
【讨论】:
我在链接页面尝试了您的示例。也许我误解了“背景”的概念,因为在我的 WP8.1 手机中,当我将其他应用程序更改为前台时,您的“背景”声音会立即停止。这是预期的吗?我用VS2013 Update5编译了它以上是关于Windows 8.1 背景音频播放器在应用程序的其他页面中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows Phone 8 应用程序中播放循环背景音频(不使用 BackroundAudio 服务)?
Windows 8.1 中的系统音频处理对象 (sAPO) 和 Skype
带有效果的 Windows 8.1 应用音频(NAudio 或 SharpDX)