2015-11-18 13 views
7

Tworzę aplikację Windows 10 UWP, która obejmuje BackgroundDownloader działa tylko na pulpicie, a nie na telefonie.BackgroundDownloader nie działa w przypadku mobilnego systemu Windows UWP?

Kod:

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

Po linii await d.StartAsync().AsTask(cancellationToken.Token,progressCallback); program nie kontynuować. I nie ma też błędów. To nie działa tylko na telefonie działa idealnie na pulpicie! czego mi brakuje?

+0

to tylko wskazówka, ale przy starcie aplikacji po poprzednim zakończeniu należy wyliczyć wszystkie istniejące DownloadOperations i ponownie dołączyć je do bieżącej sesji. BackgroundDownloader nie obsługuje pobierania plików o tym samym identyfikatorze URI, więc jeśli jest gdzieś zawieszona funkcja DownloadOperation, może to spowodować problem. Zobacz https://msdn.microsoft.com/library/windows/apps/br207126 – Liero

+0

Dzięki za wskazówkę Liero, wypróbowałeś to, ale nadal nie działa. – AbsoluteSith

+0

Przetestowałem Twój kod w Mobile Emulator 10.0.10240 bez 'SoundClass', ponieważ nie wiem, co to jest i twój kod działa dobrze. Czy testujesz w Emulatorze lub w prawdziwym urządzeniu? Oto przykład [Transfer danych w tle] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTransfer) od firmy Microsoft, możesz przetestować go za pomocą identyfikatora URI użytego w kodzie, aby wyświetlić Jeśli działa. –

Odpowiedz

0

BackgroundDownloader i myślę, że wszystkie zadania tła w Windows UWP trudno z nimi pracować. Najpierw należy utworzyć nowe rozwiązanie w bieżącym rozwiązaniu jako składnik środowiska wykonawczego systemu Windows. Po tym należy połączyć za pomocą Package.AppxManifest. Uh, Nie zapomnij, aby komponent środowiska wykonawczego był punktem odniesienia dla głównego projektu. jeśli robisz te rzeczy, mam nadzieję, że to musi być praca. ale upewnij się, że masz RuntimeComponent i połączyłeś go z projektem

+0

Bardzo wątpię, czy potrzebujemy utworzyć zadanie tła w celu pobrania w tle. Więc to naprawdę nie jest rozwiązanie. – AbsoluteSith

0

Mieliśmy problem z dokładnie tym samym problemem, ale w aplikacji Universal Windows 10 - nie w telefonie. Winowajcą w naszym przypadku był tryb oszczędzania baterii w systemie Windows 10. Na urządzeniu z systemem Windows 10 stuknij ikonę baterii. Powinno to spowodować wyświetlenie wyswietlania baterii i jasności ekranu. Wyłącz tryb baterii.

Efekt był taki sam dla każdej aplikacji korzystającej z aplikacji Pobieranie w tle, w tym przykładowej aplikacji pobierania MSDN.

Ponownie, nie było to na urządzeniach mobilnych, ale konsekwentnie działo się to w naszej aplikacji dla systemu Windows 10. Mam nadzieję, że jest podobny do telefonu.

0

W moim przypadku ten sam kod nie działa w trybie debugowania podłączając telefon do laptopa z kabla USB, ale działa poprzez pobieranie i instalowanie aplikacji w trybie Release .

Powiązane problemy