1

我有一个使用 BackgroundDownloader 加载图片的 UWP Windows 8.1 应用程序。即使应用程序被暂停,我也需要能够下载。该应用程序在 Windows 8 和 Windows 10 上运行。在 Windows 10 中,可以禁用后台任务(设置 -> 隐私 -> 后台应用程序)。如果我的应用程序被阻止使用后台任务,下载将永远不会完成。

我尝试使用 BackgroundExecutionManager.GetAccessStatus() 来确定当前权限并在权限关闭时切换到 HttpClient。我遇到了两个问题:

  1. 我只能在下载之前获得当前状态。我没有找到任何方法从系统中获取通知或设置已更改的内容。
  2. 在 Windows 8 上,调用此方法会导致应用程序崩溃。

所以我有两个问题:

  1. 当 Windows 10 中的后台应用程序设置关闭时,有什么方法可以使用 BackgroundDownloader?(我想注意到,即使关闭设置,UWP Windows 10 应用程序中的相同代码也能正常工作)。
  2. 有什么方法可以在 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);
        }
    }
4

0 回答 0