gpt4 book ai didi

c# - 在 UWP 中后台播放音频最简单的方法是什么?

转载 作者:可可西里 更新时间:2023-11-01 09:44:39 25 4
gpt4 key购买 nike

我正在处理我的项目(一个 soundcloud 客户端),该应用程序可以很好地播放轨道,但当应用程序最小化时就不行了。我使用 MediaElement-Object 从 url 播放 mp3。当应用程序处于后台时,我如何强制音乐继续播放音乐。或者什么是最简单的方法/最好的解释教程来实现这个。我搜索了很多好的答案,但我发现那些对我来说太好了:D 什么意思,我不明白。

最佳答案

要在后台播放音频,您必须在 Package.appxmanifest 中为后台任务做一个声明,启用音频并添加一个入口点,如 TestUWP.MainPage页面。

enter image description here

还可以让用户轻松管理您可以使用的音频 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();
});
}

输出

Output

如果您想启用更多控件,您可以使用 ex 的可用属性。

systemControls.IsNextEnabled = true;

并且您必须在按钮开关中添加case

case SystemMediaTransportControlsButton.Next:
//handle next song
break;

关于c# - 在 UWP 中后台播放音频最简单的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com