您好我正在构建一个UWP无线电应用程序,用户可以选择不同的电台和播客。
我已经完成了我的设计,所以我已经实现了一个splitview,当用户开始播放音频时,MediaElement会出现在屏幕的底部,然后无论用户的应用页面是什么,slaview都会停留在那里导航到。
为了让我在后台播放音频
<MediaElement x:Name="BGMediaElement"
AudioCategory="BackgroundCapableMedia"
然后我有以下代码来控制它。
systemControls = SystemMediaTransportControls.GetForCurrentView();
systemControls.ButtonPressed += SystemControls_ButtonPressed;
systemControls.IsEnabled = true;
systemControls.IsPlayEnabled = true;
systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
systemControls.IsPauseEnabled = true;
private void BGMediaElement_CurrentStateChanged(object sender, RoutedEventArgs e)
{
switch (BGMediaElement.CurrentState)
{
case MediaElementState.Playing:
systemControls.PlaybackStatus = MediaPlaybackStatus.Playing;
//playButton.Icon = new SymbolIcon(Symbol.Stop);
break;
case MediaElementState.Paused:
systemControls.PlaybackStatus = MediaPlaybackStatus.Paused;
break;
case MediaElementState.Stopped:
systemControls.PlaybackStatus = MediaPlaybackStatus.Stopped;
//playButton.Icon = new SymbolIcon(Symbol.Play);
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();
//playButton.Icon = new SymbolIcon(Symbol.Pause);
break;
case SystemMediaTransportControlsButton.Pause:
PauseMedia();
//playButton.Icon = new SymbolIcon(Symbol.Play);
break;
default:
break;
}
}
async void PlayMedia()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
BGMediaElement.Play();
});
}
async void PauseMedia()
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
BGMediaElement.Pause();
});
}
现在我的问题是,这在PC上完美无缺,在移动设备上进行调试时,但只要我在手机上运行应用程序而不调试它,背景音频就会停止工作。
我已经在appxmanifest中设置了后台任务音频的声明。
我查看了UWP样本的背景音频,他们实现了一个单独的BackgroundAudioTask。这只是额外的工作,而且样本有很多像播放列表这样的东西,我不需要用于收音机/播客应用程序,特别是当我的代码在PC上运行完美时,我希望splitview mediaelemant在同一个时间。
希望有人能轻松解决问题。 : - )