酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windowsストアアプリで共有コントラクトを使ってテキストデータを共有する

Androidでいうところの「Intent」ですね(投げやり)。

Metro スタイル アプリの前段階であるWindows PhoneのSilverlightですが、他のスマートフォンのアプリケーションフレームワークと比較した場合大きな欠点がありました。アプリケーション間連携の機能が存在しませんでした。例外的にですが、Microsoft.Phone.Tasks名前空間にあるLaunchers&Chooser機能で一部のOS標準アプリケーションとの連携をおこなうことができていました。

共有コントラクトは、その欠点を補うようにWindows 8で導入された強力な新機能の1つで、Metro スタイル アプリを開発する上で欠かせないものとなっています。他のサードベンダー製のアプリケーションとの連携ができるようになり、コントラクト対応のアプリケーションが増えれば増えるほど、私たちのWindows 8環境が便利になっていきます。

共有コントラクトは、データを投げる側とデータを受け取る側のそれぞれ役割によって実装が異なります。本記事では共有コントラクトを使って、テキストデータを共有する(データを投げる)側の実装をおこないます。

using Windows.ApplicationModel.DataTransfer;

ここではボタンのクリックをトリガーにして共有コントラクトUIを起動させてみました。

// 画像を共有するお!
private void btnSharePicture_Click(object sender, RoutedEventArgs e)
{
    // デフォルトのDataTransferManagerオブジェクトの取得
    var tramsferManager = DataTransferManager.GetForCurrentView();
    tramsferManager.DataRequested += tramsferManager_DataRequested;

    // 共有コントラクトUIの起動
    DataTransferManager.ShowShareUI();
}

共有コントラクトUIの起動すると、DataRequestedイベントが発生します。このイベントハンドラで共有したいものを設定します。

// 共有処理が開始されると発生する。必要なデータはここで共有する
private void tramsferManager_DataRequested(DataTransferManager sender, DataRequestedEventArgs args)
{
    // 共有コントラクトで表示されるタイトル
    args.Request.Data.Properties.Title = "タイトル";
    args.Request.Data.SetText("ほげほげ");
}

テキストを受け取ることができるアプリが共有先の候補に上がっています。