読者です 読者をやめる 読者になる 読者になる

がりらぼ

WindowsRuntimeの応援ブログ

WinRT:バックグラウンドでダウンロードするには

WindowsRuntime

バックグラウンド転送

WindowsRuntimeでは、通常のネットワーク転送API(HttpClientなど)ではデータ転送に時間がかかる場合、アプリが一時停止状態に入るとコネクションが切断されてしまいます。

これでは時間のかかるデータ転送は成功させることができません。

しかし、バックグラウンド転送APIを使うとアプリが中断状態に入ったとしても接続を維持することができます。(アプリが終了するとコネクションが切断されます)

 

BackgroundDownloader

バックグラウンドでダウンロードをするには、BackgroundDownloaderを使います。

BackgroundDownloaderを使うには以下の名前空間を使用します。

using Windows.Networking.BackgroundTransfer;

インスタンスを生成し、

BackgroundDownloader downloader = new BackgroundDownloader();

 

ダウンロード先のURIとダウンロードしたデータの保存先を指定し、DownloadOperationを作ります。

Uri uri = new Uri("http://ecx.images-amazon.com/images/I/418r9lN5c5L._AA278_PIkin4,BottomRight,-40,22_AA300_SH20_OU09_.jpg");
StorageFile file=await KnownFolders.PicturesLibrary.CreateFileAsync("hoge.jpg",CreationCollisionOption.ReplaceExisting);
DownloadOperation operation=downloader.CreateDownload(uri,file);

 

StartAsyncで非同期ダウンロードを行います。

このダウンロードが完了するか失敗するまではアプリが一時停止になったとしてもシステムが接続を切断しません。

await operation.StartAsync();

 

ここではダウンロード先をKnownFoldersのPictureLibraryに保存しています。

マニフェストファイルから画像ライブラリにチェックをつけましょう。

BackgroundDownloader downloader = new BackgroundDownloader();
Uri uri = new Uri("http://ecx.images-amazon.com/images/I/418r9lN5c5L._AA278_PIkin4,BottomRight,-40,22_AA300_SH20_OU09_.jpg");
StorageFile file=await KnownFolders.PicturesLibrary.CreateFileAsync("hoge.jpg",CreationCollisionOption.ReplaceExisting);

DownloadOperation operation=downloader.CreateDownload(uri,file);

await operation.StartAsync();

 

ダウンロードが完了したときに通知を行う

ダウンロードが成功、失敗したときはトースト通知かタイル通知を発行することができます。

ダウンロードが成功したときは、BackgroundDownloaderのSuccessToastNotificationプロパティにToastNotificationを指定します。

downloader.SuccessToastNotification = new ToastNotification(ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText01));

ダウンロードが失敗したときはBackgroundDownloaderのFailureToastNotificationプロパティにToastNotificationを指定します。

downloader.FailureToastNotification = new ToastNotification(ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText01));

 

トースト通知を行うにはマニフェストファイルからトースト対応を「はい」にします。

BackgroundDownloader downloader = new BackgroundDownloader();
Uri uri = new Uri("http://ecx.images-amazon.com/images/I/418r9lN5c5L._AA278_PIkin4,BottomRight,-40,22_AA300_SH20_OU09_.jpg");
StorageFile file=await KnownFolders.PicturesLibrary.CreateFileAsync("hoge.jpg",CreationCollisionOption.ReplaceExisting);

downloader.SuccessToastNotification = new ToastNotification(ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText01));
downloader.FailureToastNotification = new ToastNotification(ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText01));
DownloadOperation operation=downloader.CreateDownload(uri,file);

await operation.StartAsync();

 

バックグラウンドでダウンロードするには | garicchi.com

WindowsRuntime入門 | garicchi.com