gpt4 book ai didi

c# - BackgroundAudioTask 在被另一个应用程序取消后无法正常工作

转载 作者:行者123 更新时间:2023-11-30 17:45:26 24 4
gpt4 key购买 nike

当我的应用程序的 BackgroundAudioTask 被 Windows Phone 8.1 上也使用 BackgroundAudioTask 的其他应用程序取消时,当我返回我的应用程序时,它将不再播放音频在后台。当应用程序运行时它会正常播放,但如果它被暂停 - 背景音频也会停止。

重现此问题的步骤是:
我启动了具有 BackgroundAudioTask 的 Windows Phone 8.1 应用程序,一切正常。我启动了另一个使用 BackgroundAudioTask 的应用程序,例如音乐播放器,它将取消我的应用程序的 BackgroundAudioTask

当我第二次启动我的应用程序时,我想重新注册我的 BackgroundAudioTask 以便它的行为与最初一样。

Package.appxmanifest 我有以下内容:

<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="WindowsPhoneBackgroundAudioTask.BackgroundAudioTask">
<BackgroundTasks>
<Task Type="audio" />
</BackgroundTasks>
</Extension>
</Extensions>

当我第一次运行应用程序时,Run 方法将被调用,我向任务添加了一个Deferral 以确保即使在我关闭我的应用程序时它也保持事件状态:

public void Run(IBackgroundTaskInstance taskInstance)
{
setupDeferral = taskInstance.GetDeferral();
}

当我从另一个应用程序启动音乐播放器时,我的 BackgroundAudioTask Cancelled 事件被调用(如果我不执行 setupDeferral.Complete(),我的应用程序将崩溃) :

private void Task_Canceled(IBackgroundTaskInstance sender, BackgroundTaskCancellationReason reason)
{
setupDeferral.Complete();
}

当我打开我的应用程序时,如何重新创建我的 BackgroundAudioTask?问题是 Run 方法再也不会被调用,所以我无法再次设置 Deferral。音乐现在可以在应用程序中正常播放,但一旦我离开应用程序,音乐就会停止。

我尝试使用以下代码在 App_Resuming 事件的 App.xaml.cs 中手动重新注册任务:

var taskBuilder = new BackgroundTaskBuilder();
taskBuilder.Name = "BackgroundAudioTask";
taskBuilder.TaskEntryPoint = typeof(WindowsPhoneBackgroundAudioTask.BackgroundAudioTask).FullName;
BackgroundTaskRegistration task = taskBuilder.Register();

上面的代码将抛出 InvalidArgumentException 因为它没有触发器设置。我不希望它有触发器。我只想立即启动后台任务。

有没有办法手动指示操作系统再次运行背景音频或更好地处理取消的背景音频?

最佳答案

我知道这真的很老 - 但也许有人会遇到它。您实际上根本不需要注册任务。对于背景音频,您需要做的就是调用

BackgroundMediaPlayer.Current

它会启动任务,然后您的代码将获得延迟。

关于c# - BackgroundAudioTask 在被另一个应用程序取消后无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27603577/

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