2015-11-18 9 views
7

Ich erstelle eine Windows 10 UWP App, die HintergrundDownloader betrifft dies funktioniert nur auf dem Desktop und nicht auf dem Handy.BackgroundDownloader funktioniert nicht für Windows 10 Mobile UWP?

Code:

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; 
    } 
} 

Nach der Leitung await d.StartAsync().AsTask(cancellationToken.Token,progressCallback); das Programm nicht weitergehen. Und es gibt auch keine Fehler. Das klappt nicht nur am Telefon funktioniert einwandfrei auf dem Desktop! Was vermisse ich?

+0

es ist nur ein Tipp, aber beim Start der Anwendung nach der vorherigen Beendigung sollten Sie alle vorhandenen DownloadOperationen auflisten und sie an die aktuelle Sitzung wieder anfügen. BackgroundDownloader unterstützt keine konsistenten Downloads derselben URI. Wenn DownloadOperation irgendwo hängt, kann dies das Problem verursachen. Siehe https://msdn.microsoft.com/library/windows/apps/br207126 – Liero

+0

Danke für den Tipp Liero, versuchte das aber es funktioniert immer noch nicht. – AbsoluteSith

+0

Ich habe Ihren Code in Mobile Emulator 10.0.10240 ohne 'SoundClass' getestet, da ich nicht weiß, was es ist und Ihr Code funktioniert gut. Testen Sie im Emulator oder in einem echten Gerät? Hier ist ein [Hintergrund Übertragungsbeispiel] (https://github.com/Microsoft/Windows-Universal-samples/tree/master/Samples/BackgroundTransfer) von Microsoft, Sie können es mit dem URI testen, den Sie in Ihrem Code verwendet haben, um zu sehen ob es funktioniert. –

Antwort

0

BackgroundDownloader und ich denke, alle BackgroundTasks in Windows UWP schwer mit ihnen zu arbeiten. Sie müssen zunächst eine neue Lösung in Ihrer aktuellen Lösung als Windows Runtime-Komponente erstellen. Danach müssen Sie es über Package.AppxManifest verknüpfen. Uh, Vergessen Sie nicht, die Laufzeitkomponente als Referenz für Ihr Hauptprojekt zu verwenden. Wenn Sie diese Dinge tun, muss es hoffentlich funktionieren. aber stellen Sie sicher, dass Sie eine RuntimeComponent haben und Sie in Ihr Projekt

+0

Ich bezweifle sehr, dass wir eine Hintergrund-Aufgabe erstellen müssen, um den Hintergrund herunterzuladen. Das ist also nicht wirklich eine Lösung. – AbsoluteSith

0

Wir hatten Probleme mit genau dem gleichen Problem, aber auf einer Universal Windows 10 App - nicht Telefon. Der Schuldige in unserem Fall war der Energiesparmodus von Windows 10. Tippen Sie auf einem Windows 10-Gerät auf das Akkusymbol. Dies sollte die Flyout-Funktion für Batterie und Bildschirmhelligkeit aktivieren. Deaktivieren Sie den Akku-Modus.

Der Effekt war für alle Apps gleich, die den Hintergrund-Downloader verwenden, einschließlich der MSDN-Download-Beispielanwendung.

Auch dies war nicht auf dem Handy, aber es ist konsequent auf unserer Windows 10 App passiert. Hoffe, es ist ähnlich wie Telefon.

0

In meinem Fall der gleiche Code funktioniert nicht in Debug Modus durch das Telefon mit dem Laptop verbinden mit USB-Kabel, aber es funktioniert durch das Herunterladen und die App in Veröffentlichung Modus installieren.