在 UWP 中在后台播放音频的最简单方法是啥?
Posted
技术标签:
【中文标题】在 UWP 中在后台播放音频的最简单方法是啥?【英文标题】:What's the easiest way to play audio in background in UWP?在 UWP 中在后台播放音频的最简单方法是什么? 【发布时间】:2016-09-04 08:48:22 【问题描述】:我正在开发我的项目(soundcloud 客户端),该应用程序可以正常播放曲目,但在应用程序最小化时不能。我使用 MediaElement-Object 从 url 播放 mp3。当应用程序在后台时,如何强制音乐继续播放音乐。或者什么是最简单的方法/最好的解释教程来实现这个。我搜索了很多好答案,但我发现那些对我来说太好了 :D 什么意思,我不明白。
【问题讨论】:
【参考方案1】:要在后台播放音频,您必须在Package.appxmanifest
中为后台任务声明,启用音频并添加一个入口点,如TestUWP.MainPage
页面。
还让用户能够轻松管理您可以使用的音频SystemMediaTransportControls
这是播放和暂停的基本设置。
xaml
<MediaElement x:Name="mediaElement" Height="100" Width="100" AreTransportControlsEnabled="True"/>
C#
public MainPage()
this.InitializeComponent();
systemControls = SystemMediaTransportControls.GetForCurrentView();
// Register to handle the following system transpot control buttons.
systemControls.ButtonPressed += SystemControls_ButtonPressed;
mediaElement.CurrentStateChanged += MediaElement_CurrentStateChanged;
systemControls.IsPlayEnabled = true;
systemControls.IsPauseEnabled = true;
private void MediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
switch (mediaElement.CurrentState)
case MediaElementState.Playing:
systemControls.PlaybackStatus = MediaPlaybackStatus.Playing;
break;
case MediaElementState.Paused:
systemControls.PlaybackStatus = MediaPlaybackStatus.Paused;
break;
case MediaElementState.Stopped:
systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
break;
case MediaElementState.Closed:
systemControls.PlaybackStatus = MediaPlaybackStatus.Closed;
break;
default:
break;
void SystemControls_ButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
switch (args.Button)
case SystemMediaTransportControlsButton.Play:
PlayMedia();
break;
case SystemMediaTransportControlsButton.Pause:
PauseMedia();
break;
case SystemMediaTransportControlsButton.Stop:
StopMedia();
break;
default:
break;
private async void StopMedia()
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
mediaElement.Stop();
);
async void PlayMedia()
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
if (mediaElement.CurrentState == MediaElementState.Playing)
mediaElement.Pause();
else
mediaElement.Play();
);
async void PauseMedia()
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
mediaElement.Pause();
);
输出
如果您想启用更多控件,您可以使用 ex 的可用属性。
systemControls.IsNextEnabled = true;
你必须在按钮开关中添加case
。
case SystemMediaTransportControlsButton.Next:
//handle next song
break;
【讨论】:
谢谢,但结果保持不变 - 当我最小化窗口时,您再也听不到音频了。 编辑:当我将 MediaElement 的 AudioCategory-Property 设置为 BackgroundCapableMedia 时,问题已解决。感谢您的回答,您为我节省了很多工作!以上是关于在 UWP 中在后台播放音频的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何检测其他应用程序的音频是不是在后台播放? (UWP,Windows 10)