当BackgroundAudioTask
我的应用程序被 Windows Phone 8.1 上的其他应用程序取消BackgroundAudioTask
时,当我回到我的应用程序时,它将不再在后台播放音频。当应用程序运行时它会正常播放,但如果它被暂停 - 背景音频也会停止。
重现此问题的步骤是:
我启动 Windows Phone 8.1 应用程序,它有一个BackgroundAudioTask
& 一切正常。我启动另一个应用程序,例如音乐播放器,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 Canceled事件被调用(如果我不这样做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
因为它没有触发器设置。我不希望它有触发器。我只想立即启动后台任务。
有没有办法手动指示操作系统再次运行背景音频或更好地处理取消的背景音频?