Windows 8.1背景音频播放器don';无法在应用程序的其他页面中工作
本文关键字:应用程序 其他 工作 背景 音频 播放器 don Windows | 更新日期: 2023-09-27 18:19:40
我有一个应用程序,它将从互联网流式传输音频,媒体元素在主页中,它在其中运行良好,当应用程序在后台时,我在应用程序中有多个页面,当从主页导航到另一个页面时,当我返回主页时,音频停止并返回工作
有没有办法让它在应用程序的其他页面上运行??
我为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