2015-11-18 14 views
7

私はWindowDownloaderを含むWindows 10 UWPアプリケーションを作成しています。これは、デスクトップでのみ動作し、電話では動作しません。Windows 10のモバイルUWPではBackgroundDownloaderが動作していませんか?

コード:プログラムが進行していないawait d.StartAsync().AsTask(cancellationToken.Token,progressCallback);ライン後

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

。あまりにも誤りはありません。これは、電話でのみ動作していない完全にデスクトップ上で動作します!私は何が欠けていますか?

+0

これは単なるヒントですが、前回の終了後のアプリケーションの起動時には、既存のDownloadOperationsをすべて列挙して、それらを現在のセッションに再接続する必要があります。 BackgroundDownloaderは同じURIの同時ダウンロードをサポートしていないため、DownloadOperationがどこかにぶら下がっていると問題が発生する可能性があります。 https://msdn.microsoft.com/library/windows/apps/br207126 – Liero

+0

チップLieroをお寄せいただきありがとうございますが、まだ動作していません。 – AbsoluteSith

+0

私はそれが何であるか分からず、あなたのコードがうまく動作しないので、MobileEmulator 10.0.10240であなたのコードを 'SoundClass'なしでテストしました。エミュレータまたは実際のデバイスでテストしていますか? Microsoftの[Background transfer sample](https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/BackgroundTransfer)は、コードで使用したURIでテストすることができますそれが動作すれば。 –

答えて

0

BackgroundDownloaderと私はすべてのBackgroundTasksをWindows UWPで扱うのが難しいと思います。 まず、現在のソリューションで新しいソリューションをWindowsランタイムコンポーネントとして作成する必要があります。 その後、Package.AppxManifest経由でリンクする必要があります。 Uh、メインプロジェクトのリファレンスとしてランタイムコンポーネントを作成することを忘れないでください。 これらのことをうまく行えばうまくいきます。 RuntimeComponentを持ってプロジェクトにリンクしていることを確認してください

+0

バックグラウンドをダウンロードするためにBackgroundTaskを作成する必要があることは間違いありません。これは実際の解決策ではありません。 – AbsoluteSith

0

私たちはまったく同じ問題を抱えていましたが、Universal Windows 10アプリでは電話ではありませんでした。私たちの場合の犯人は、Windows 10のバッテリー節約モードでした。 Windows 10デバイスで、バッテリーアイコンをタップします。バッテリーと画面の明るさのフライアウトが表示されます。バッテリーモードを無効にする。

効果は、MSDNダウンロードサンプルアプリを含め、バックグラウンドダウンローダを使用するアプリで同じでした。

この場合も、これはモバイルではありませんでしたが、Windows 10アプリでも一貫して発生しました。電話に似ていることを願っています。

0

私の場合は同じコードがUSBケーブルでノートパソコンに携帯電話を接続することにより、デバッグモードでは動作しませんが、それはリリースモードでアプリをダウンロードし、インストールすることで動作します。

関連する問題