我有一个使用 BackgroundDownloader 加载图片的 UWP Windows 8.1 应用程序。即使应用程序被暂停,我也需要能够下载。该应用程序在 Windows 8 和 Windows 10 上运行。在 Windows 10 中,可以禁用后台任务(设置 -> 隐私 -> 后台应用程序)。如果我的应用程序被阻止使用后台任务,下载将永远不会完成。
我尝试使用 BackgroundExecutionManager.GetAccessStatus() 来确定当前权限并在权限关闭时切换到 HttpClient。我遇到了两个问题:
- 我只能在下载之前获得当前状态。我没有找到任何方法从系统中获取通知或设置已更改的内容。
- 在 Windows 8 上,调用此方法会导致应用程序崩溃。
所以我有两个问题:
- 当 Windows 10 中的后台应用程序设置关闭时,有什么方法可以使用 BackgroundDownloader?(我想注意到,即使关闭设置,UWP Windows 10 应用程序中的相同代码也能正常工作)。
- 有什么方法可以在 Windows 8 和 10 上正常工作,以确定后台应用程序设置状态并在更改时做出反应?
我使用类似的代码
var downloader = new BackgroundDownloader();
var download = downloader.CreateDownload(source, destinationFile);
await HandleDownloadAsync(download, true);
...
private async Task HandleDownloadAsync(DownloadOperation download, bool start)
{
Progress<DownloadOperation> progressCallback = new Progress<DownloadOperation>(DownloadProgress);
var cts = new CancellationTokenSource();
cts.CancelAfter(120000);
if (start)
{
await download.StartAsync().AsTask(cts.Token, progressCallback);
}
else
{
await download.AttachAsync().AsTask(cts.Token, progressCallback);
}
}