BackgroundDownloader 不适用于 Windows 10 移动版 UWP?
Posted
技术标签:
【中文标题】BackgroundDownloader 不适用于 Windows 10 移动版 UWP?【英文标题】:BackgroundDownloader is not working for windows 10 mobile UWP? 【发布时间】:2016-02-20 08:50:33 【问题描述】:我正在创建一个 Windows 10 UWP 应用,其中涉及 BackgroundDownloader,它仅适用于桌面,不适用于手机。
代码:
var dl = new BackgroundDownloader();
dl.CostPolicy = BackgroundTransferCostPolicy.Always;
file = await localSoundsFolder.CreateFileAsync(name, CreationCollisionOption.ReplaceExisting);
if (file != null)
var d = dl.CreateDownload(new Uri(uriToDownloadFrom,UriKind.RelativeOrAbsolute), file);
d.Priority = BackgroundTransferPriority.High;
var progressCallback = new Progress<DownloadOperation>(x => DownloadProgress(x, sc));
try
await d.StartAsync().AsTask(cancellationToken.Token,progressCallback);
//After this line it doesn't progress!
CancellationTokenSource token = Utility.cancellationList[sc];
if (token != null)
token.Cancel();
Utility.cancellationList.Remove(sc);
Debug.WriteLine("The sc has been removed from the download list");
catch
return;
private static void DownloadProgress(DownloadOperation download,SoundClass sc)
Debug.WriteLine("Callback");
var value = download.Progress.BytesReceived * 100 / download.Progress.TotalBytesToReceive;
Debug.WriteLine("The bytesReceived is 0 and total bytes is 1", download.Progress.BytesReceived.ToString(), download.Progress.TotalBytesToReceive.ToString());
new System.Threading.ManualResetEvent(false).WaitOne(10);
sc.downloadProgress = value;
if (download.Progress.Status == BackgroundTransferStatus.Completed || value >= 100)
Debug.WriteLine("DONE donwloading the file 0", download.ResultFile.Name);
Debug.WriteLine("The file name happened to be to be added was " + download.ResultFile.Name);
string fileName = download.ResultFile.Name;
在await d.StartAsync().AsTask(cancellationToken.Token,progressCallback);
行之后,程序不会继续。而且也没有错误。这不仅适用于手机,也适用于桌面!我错过了什么?
【问题讨论】:
这只是一个提示,但在上次终止后应用程序启动时,您应该枚举所有现有的 DownloadOperations 并将它们重新附加到当前会话。 BackgroundDownloader 不支持同一个 URI 的并发下载,因此如果有 DownloadOperation 挂在某处,则可能会导致问题。见msdn.microsoft.com/library/windows/apps/br207126 感谢 Liero 的提示,试过了,但还是不行。 我在没有SoundClass
的情况下在 Mobile Emulator 10.0.10240 中测试了您的代码,因为我不知道它是什么并且您的代码运行良好。您是在模拟器中还是在真实设备中进行测试?这是来自 Microsoft 的 Background transfer sample,您可以使用您在代码中使用的 URI 对其进行测试,看看它是否有效。
我尝试了一个不同的 Uri,它是一个不同的来源,它工作。但我想知道服务器端可能出了什么问题,因为我生成的 Uri 是完美的,并且正在浏览器和应用程序的桌面模式上运行?编辑:在另一部手机上尝试过,它也可以在那里工作。所以我想问题出在手机上。
@AbsoluteSith 你解决了吗?我的 Lumia 920 也有同样的问题。
【参考方案1】:
BackgroundDownloader 我认为 Windows UWP 中的所有 BackgroundTasks 都很难与它们一起工作。 您必须首先在当前解决方案中创建一个新解决方案作为 Windows 运行时组件。 之后,您必须通过 Package.AppxManifest 链接它。 呃,不要忘记将运行时组件作为主项目的参考。 如果你有希望地做这些事情,那一定是工作。但请确保您有一个 RuntimeComponent 并将其链接到您的项目中
【讨论】:
我非常怀疑我们是否需要创建 BackgroundTask 才能进行后台下载。所以这并不是真正的解决方案。【参考方案2】:我们在完全相同的问题上苦苦挣扎,但在通用 Windows 10 应用程序上,而不是在手机上。在我们的案例中,罪魁祸首是 Windows 10 的节电模式。在 Windows 10 设备上,点击电池图标。这应该会调出电池和屏幕亮度弹出按钮。禁用电池模式。
任何使用后台下载器的应用程序的效果都是相同的,包括 MSDN 下载示例应用程序。
同样,这不是在移动设备上,而是在我们的 Windows 10 应用上始终如一地发生。希望和手机一样。
【讨论】:
【参考方案3】:在我的情况下,通过 USB 数据线将手机连接到笔记本电脑,相同的代码无法在 Debug 模式下运行,但通过下载和安装应用程序即可运行处于发布模式。
【讨论】:
以上是关于BackgroundDownloader 不适用于 Windows 10 移动版 UWP?的主要内容,如果未能解决你的问题,请参考以下文章