次の方法で共有


データの受信

この記事では、共有コントラクトを使用して、別のアプリから共有されているユニバーサル Windows プラットフォーム (UWP) アプリのコンテンツを受け取る方法について説明します。 この共有コントラクトを使用すると、ユーザーが Share を呼び出すときに、アプリをオプションとして表示できます。

この記事のコード例は、UWP アプリのコード例です。 デスクトップ アプリでは 、IDataTransferManagerInterop を使用する必要があります。 詳細とコード例については、「 CoreWindow に依存する WinRT UI オブジェクトの表示」を参照してください。

デスクトップ アプリでのデータ共有の詳細については、 WPF 共有コンテンツ ソース アプリのサンプルWindows アプリの [共有の統合] オプション を参照することもできます。

アプリを共有ターゲットとして宣言する

ユーザーが Share を呼び出すと、使用可能なターゲット アプリの一覧が表示されます。 一覧に表示するには、アプリが共有コントラクトをサポートしていることを宣言する必要があります。 これにより、アプリがコンテンツを受け取ることができることがシステムに通知されます。

  1. マニフェスト ファイルを開きます。 package.appxmanifest のようなものと呼ばれる必要があります。
  2. [宣言] タブを開く。
  3. [使用可能 宣言] リストから [ターゲット 共有] を選択し、[の追加] 選択します。

ファイルの種類と形式を選択する

次に、サポートするファイルの種類とデータ形式を決定します。 Share API では、テキスト、HTML、ビットマップなど、いくつかの標準形式がサポートされています。 カスタム ファイルの種類とデータ形式を指定することもできます。 そうする場合は、ソース アプリがそれらの種類と形式を知っている必要があることを覚えておいてください。それ以外の場合、これらのアプリは形式を使用してデータを共有することはできません。

アプリで処理できる形式にのみ登録します。 ユーザーが共有を呼び出すと、共有されるデータをサポートするターゲット アプリのみが表示されます。

ファイルの種類を設定するには:

  1. マニフェスト ファイルを開きます。 package.appxmanifest のようなものと呼ばれる必要があります。
  2. [宣言] ページの [サポートされているファイルの種類] セクションで、[新規追加 ] を選択します。
  3. サポートするファイル名拡張子を入力します (例: ".docx."期間を含める必要があります。 すべてのファイルの種類をサポートする場合は、[ SupportsAnyFileType ] チェック ボックスをオンにします。

データ形式を設定するには:

  1. マニフェスト ファイルを開きます。
  2. [宣言] ページの [データ形式] セクションを開き、[新しい追加] を選択します。
  3. サポートするデータ形式の名前を入力します (例: "Text")。

共有のアクティブ化を処理する

ユーザーが (通常、共有 UI で使用可能なターゲット アプリの一覧からアプリを選択して) アプリを選択すると、 OnShareTargetActivated イベントが発生します。 ユーザーが共有するデータを処理するには、アプリでこのイベントを処理する必要があります。

protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    // Code to handle activation goes here. 
} 

ユーザーが共有するデータは、 ShareOperation オブジェクトに含まれています。 このオブジェクトを使用して、含まれるデータの形式を確認できます。

ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();

    // To output the text from this example, you need a TextBlock control
    // with a name of "sharedContent".
    sharedContent.Text = "Text: " + text;
} 

レポート共有の状態

場合によっては、アプリが共有するデータを処理するのに時間がかかる場合があります。 たとえば、ファイルまたはイメージのコレクションを共有するユーザーが挙げられます。 これらの項目は単純なテキスト文字列よりも大きいので、処理に時間がかかります。

shareOperation.ReportStarted(); 

ReportStartedを呼び出した後は、アプリに対するさらなるユーザーの操作はないと考えてください。 その結果、アプリがユーザーによって無視できる時点でない限り、呼び出さないでください。

拡張共有を使用すると、アプリが DataPackage オブジェクトのすべてのデータを取得する前に、ユーザーがソース アプリを閉じる可能性があります。 そのため、アプリが必要なデータをいつ取得したかをシステムに通知することをお勧めします。 これにより、システムは必要に応じてソース アプリを中断または終了できます。

shareOperation.ReportSubmittedBackgroundTask(); 

問題が発生した場合は、 ReportError を呼び出して、エラー メッセージをシステムに送信します。 共有の状態を確認すると、ユーザーにメッセージが表示されます。 その時点で、アプリがシャットダウンされ、共有が終了します。 ユーザーは、コンテンツをアプリと共有するために、もう一度開始する必要があります。 シナリオによっては、特定のエラーが、共有操作を終了するのに十分な深刻でないと判断する場合があります。 その場合は、ReportError 呼び出さないことを選択し、共有を続行できます。

shareOperation.ReportError("Could not reach the server! Try again later."); 

最後に、アプリが共有コンテンツを正常に処理したら、 ReportCompleted を呼び出してシステムに通知する必要があります。

shareOperation.ReportCompleted();

これらのメソッドを使用する場合は、通常、説明した順序で呼び出しますが、複数回呼び出すことはありません。 ただし、ターゲット アプリが ReportStartedの前 ReportDataRetrieved 呼び出すことができる場合があります。 たとえば、アプリはアクティブ化ハンドラーのタスクの一部としてデータを取得しますが、ユーザーが [共有] ボタンを選択するまで ReportStarted を呼び出さない場合があります。

ユーザーがコンテンツを受け取るためにアプリを選択した場合は、 QuickLink を作成することをお勧めします。 QuickLink は、ユーザーがアプリと情報を簡単に共有できるようにするショートカットのようなものです。 たとえば、友人のメール アドレスで事前に構成された新しいメール メッセージを開く QuickLink を作成できます。

QuickLink には、タイトル、アイコン、ID が必要です。ユーザーが [共有] チャームをタップすると、タイトル ("Email Mom" など) とアイコンが表示されます。 ID は、メール アドレスやログイン資格情報などのカスタム情報にアクセスするためにアプリで使用されます。 アプリが QuickLinkを作成すると、その QuickLink をシステムに返すために、ReportCompletedを呼び出します。

QuickLink は実際にはデータを格納しません。 代わりに、選択するとアプリに送信される識別子が含まれます。 アプリは、 QuickLink の ID とそれに対応するユーザー データを格納する役割を担います。 ユーザーが QuickLink をタップすると、 QuickLinkId プロパティを使用してその ID を取得できます。

async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // For quicklinks, the supported FileTypes and DataFormats are set 
        // independently from the manifest
        SupportedFileTypes = { "*" },
        SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri, 
                StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
            "assets\\user.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    shareOperation.ReportCompleted(quickLinkInfo);
}

こちらも参照ください