Я работаю над своим проектом (клиентом soundcloud), и приложение может воспроизводить треки просто отлично, но не тогда, когда приложение сведено к минимуму. Я использую MediaElement-Object для воспроизведения mp3 с URL-адреса. Как заставить музыку продолжать воспроизведение музыки, когда приложение находится в фоновом режиме. Или самый простой способ/лучший объяснимый учебник для реализации этого. Я искал много за хороший ответ, но те, которые я нашел, были слишком хороши для меня: D Что означает, что я этого не понял.Что является самым простым способом воспроизведения аудио в фоновом режиме в UWP?
ответ
Чтобы воспроизвести звук в фоновом режиме, вам необходимо будет сделать Декларацию в Package.appxmanifest
для фоновых задач, включить звук и добавить точку входа, такую как TestUWP.MainPage
.
Кроме того, для пользователя, чтобы иметь возможность легко управлять аудио вы можете использовать SystemMediaTransportControls
Вот основные настройки с Play и Pause.
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();
});
}
Выход
Если вы хотите включить несколько элементов управления, которые можно сделать с помощью доступных свойств напр.
systemControls.IsNextEnabled = true;
и вы должны добавить case
в кнопочного выключателя.
case SystemMediaTransportControlsButton.Next:
//handle next song
break;
Для этого необходимо использовать задачу BackgroundAudio для работы на мобильных устройствах Windows. Эта статья проведет вас через образец github, предоставленный Microsoft. https://blogs.windows.com/buildingapps/2016/01/13/the-basics-of-background-audio/
спасибо, но результат сохраняет то же самое - когда я сворачиваю окно, вы больше не слышите звук. – Flauschcoder
Редактирование: проблема решена, поскольку я установил AudioCategory-Свойство MediaElement в BackgroundCapableMedia. Спасибо за ваш ответ, вы спасли меня много работы! – Flauschcoder
Редактировать 2: Он работает на ПК, но не для мобильного: / – Flauschcoder