ユニバーサルWindowsアプリ「共有」 #win8dev_jp #wpdev_jp
ユニバーサルWindowsアプリの[共有]
機能のまとめです。
過去の記事のまとめになります。それぞれの機能の詳細は過去の記事をご覧ください。
- ストアアプリで自分のアプリから共有を呼び出す #win8dev_jp #wpdev_jp - KatsuYuzuのブログ
- ストアアプリで自分のアプリからデータを共有する #win8dev_jp #wpdev_jp - KatsuYuzuのブログ
- ストアアプリで自分のアプリへデータを共有する #win8dev_jp #wpdev_jp - KatsuYuzuのブログ
サンプルはGithubからダウンロードしてください。
共有を呼び出す
任意の操作から共有を呼び出します。
DataTransferManager.ShowShareUI();
共有を送信する
共有操作の開始を購読します。
// アプリケーション内で1度のみ購読する、または、画面毎などで適切に購読と解除を行う
DataTransferManager.GetForCurrentView().DataRequested += OnDataRequested;
共有を処理します。
void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e) { // 必須 e.Request.Data.Properties.Title = "共有するデータのタイトル"; e.Request.Data.Properties.Description = "共有するデータの説明"; // 以下、適宜 // 共有する文字列 e.Request.Data.SetText("共有するテキスト!"); }
ファイルなどの時間や処理を伴う共有はデリゲートを通して共有します。
void OnDataRequested(DataTransferManager sender, DataRequestedEventArgs e) { // 必須 e.Request.Data.Properties.Title = "共有するデータのタイトル"; e.Request.Data.Properties.Description = "共有するデータの説明"; // 以下、適宜 // 共有するファイルの拡張子 e.Request.Data.Properties.FileTypes.Add(".jpg"); // 共有するファイルを処理するデリゲート e.Request.Data.SetDataProvider( StandardDataFormats.StorageItems, this.OnDeferredImageRequestedHandler); } async void OnDeferredImageRequestedHandler(DataProviderRequest request) { // 非同期処理の開始 var deferral = request.GetDeferral(); try { // ファイルの非同期操作 var files = await ... // 共有するファイル request.SetData(files); } finally { // 非同期処理の終了 deferral.Complete(); } }
共有を受信する
共有によるアプリケーションのアクティブ化を処理します。
// App.xaml.cs protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args) { var rootFrame = new Frame(); rootFrame.Navigate(typeof(HogePage), args.ShareOperation); Window.Current.Content = rootFrame; Window.Current.Activate(); }
共有されたデータを処理します。
// HogePage.xaml.cs protected async override void OnNavigatedTo(NavigationEventArgs e) { var shareOperation = e.Parameter as ShareOperation; if (shareOperation == null) { return; } // 共有されたデータのタイトルと説明 var receivedDataTitle = shareOperation.Data.Properties.Title; var receivedDataDescription = shareOperation.Data.Properties.Description; // StorageItems の共有を確認 if (shareOperation.Data.Contains(StandardDataFormats.StorageItems)) { // 共有されたデータの取得 var storageItems= await shareOperation.Data.GetStorageItemsAsync(); // 以下、適宜 } }