このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
MSDN ライブラリ
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

クイック スタート: 共有コンテンツの受信 (XAML)

このクイックスタートでは、別のアプリから共有コンテンツを受け取る手順について説明します。

目標: 共有コンテンツを受け取る方法について理解する。

必要条件

  • Visual Studio とそのテンプレートについて理解している必要があります。
  • C#/C++ での開発について理解している必要があります。

手順

共有コントラクトのサポート

アプリで共有コンテンツを受け取るには、事前に共有コントラクトのサポートを宣言する必要があります。このコントラクトを使うと、アプリがコンテンツを受け取れることをシステムに通知できます。Visual Studio テンプレートを使ってアプリを作る場合は、次の手順に従って共有コントラクトをサポートします。

  1. マニフェスト ファイルを開きます。マニフェスト ファイルは package.appxmanifest のような名前になっています。
  2. [宣言] タブを開きます。
  3. [使用可能な宣言] ボックスの一覧の [共有ターゲット] を選び、[追加] をクリックします。

サポートするファイルの種類とデータ形式を指定します。

ターゲット アプリの開発者は、サポートするファイルの種類とデータ形式を決定する必要があります。サポートするファイルの種類を指定するには、次の操作を実行します。

  1. マニフェスト ファイルを開きます。マニフェスト ファイルは package.appxmanifest のような名前になっています。
  2. [宣言] ページの [サポートされるファイルの種類] セクションで、[新規追加] をクリックします。
  3. サポートするファイル名拡張子を入力します。たとえば、「.docx」と入力します。ピリオド (.) を忘れないように注意してください。

すべてのファイルの種類をサポートする場合は、SupportsAnyFileType ボックスをオンにします。

サポートするデータ形式を指定するには、次のようにします。

  1. マニフェスト ファイルを開きます。
  2. [宣言] ページの [データ形式] セクションで、[新規追加] をクリックします。
  3. サポートするデータ形式の名前を入力します。たとえば、「テキスト」と入力します。

共有 API では、テキスト、HTML、ビットマップなど複数の標準形式がサポートされます。カスタムのファイルの種類とデータ形式を指定することもできます。これを行う場合は、その種類と形式がどのようなものかをソース アプリが把握している必要があることを忘れないでください。それ以外では、ソース アプリはその形式を使ってデータを共有できません。

DataTransfer 名前空間の追加

共有アクティブ化イベントを処理し、共有に関するオブジェクトを作成して処理できるように、正しい名前空間をアプリに追加する必要があります。ターゲット アプリの場合は、Windows.ApplicationModel.ActivationWindows.ApplicationModel.DataTransferWindows.ApplicationModel.DataTransfer.ShareTarget の名前空間が必要です。


using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.DataTransfer;
using Windows.ApplicationModel.DataTransfer.ShareTarget;


共有のアクティブ化の処理

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


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

  

アプリが共有ターゲットとしてアクティブ化されたとき、そのアプリが実行中の場合は、既にあるアプリのインスタンスは終了され、新しいアプリのインスタンスが起動してコントラクトを処理します。


void App::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;
}


長時間共有状態の報告 (時間のかかる操作の場合)

  

次の手順は Windows ストア アプリにのみ適用されます。ここで使っている報告用のメソッドは Windows Phone 8.1 からも呼び出すことができますが、その場合はデータは返されません。

場合によっては、ユーザーが共有するデータをアプリが処理するのに時間がかかることがあります。このような状況を長時間共有と呼びます。長時間共有の例として、ファイルまたは画像のコレクションの共有があります。これらの項目は単純なテキスト文字列より大きいため、処理に時間がかかります。

  テキストやハイパーリンクなどの単純なものしか共有しない場合は、このセクションを省略できます。

ターゲット アプリは、単にデータの処理に時間がかかるという理由でユーザーを同じ共有 UI にとどまらせないようにします。代わりに、ShareOperation オブジェクトを使って、アプリがまだ動作中であることをシステムに通知する必要があります。そうすると、ユーザーは共有 UI を閉じて、それまで行っていた作業に戻ることができます。その間、アプリはデータの処理をバックグラウンドで続けます。


shareOperation.ReportStarted();


ReportStarted を呼び出したら、ユーザーはアプリをそれ以上操作できなくなります。したがって、このオブジェクトの呼び出しは、ユーザーがアプリを閉じても問題がない状況でのみ行ってください。

長時間共有が行われている状況では、アプリが DataPackage オブジェクトからすべてのデータを取得する前に、ユーザーがソース アプリを閉じる可能性があります。そのため、アプリが必要なデータを取得したタイミングをシステムに通知することをお勧めします。こうすると、システムは必要に応じてソース アプリを中断または終了できます。


shareOperation.ReportDataRetreived();

コンテンツのアップロードに Windows.Networking.BackgroundTransfer classes を使っているかどうかをシステムに通知することもお勧めします。これを行うには、ReportSubmittedBackgroundTask メソッドを使います。


shareOperation.ReportSubmittedBackgroundTask();

問題が発生した場合には、ReportError を呼び出して、エラー メッセージをシステムに送ることもできます。ユーザーは、共有の状態を確認したときにこのメッセージを目にします。その時点で、アプリがシャットダウンし、共有が終了します。この場合、ユーザーはアプリでのコンテンツの共有をやり直す必要があります。エラーの中にはそれほど重大ではないものも含まれ、シナリオによっては、共有操作を終了しなくても済む場合もあります。その場合は、ReportError を呼び出さずに、共有を続けることができます。


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

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

この共有が稼動している状況を確認するには、コンテンツ共有ターゲット アプリ サンプルをご覧ください。

共有が完了したことの報告

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


shareOperation.ReportCompleted();

アプリは、共有が完了したことを認識すると終了します。

共有が成功した場合に QuickLink オブジェクトを返す

  

QuickLink は Windows Phone 8.1 ではサポートされません。Windows Phone ストア アプリでは、共有操作の一部として QuickLink を受け取ることはできますが、これらのリンクは自動的に無視されます。

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

QuickLink には、タイトル、アイコン、ID が必要です。タイトル (「母へのメール」など) とアイコンは、ユーザーが共有チャームをタップすると表示されます。ID は、アプリがメール アドレスやログイン資格情報などのカスタム情報にアクセスするために使われます。アプリは、QuickLink を作成すると、ShareOperation オブジェクトの ReportCompleted メソッドを呼び出して QuickLink をシステムに返します。次に例を示します。


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


アプリで QuickLink の ID と対応するユーザー データを格納する必要があることを忘れないでください。ユーザーが QuickLink をタップすると、ShareOperation オブジェクトの QuickLinkId プロパティを介してその ID を取得できます。

要約と次のステップ

以上で、共有コンテンツを受け取る方法と、QuickLink を作成してユーザーがコンテンツをアプリと共有できるようにする、お勧めの方法を説明しました。

さらに詳しく学習するか、共有をアプリに追加する方法に関する具体的な例を参照するには、次のトピックをご覧ください。

  共有ターゲット アプリのデバッグは他の種類のアプリのデバッグとは異なります。詳しくは、「ターゲット アプリのデバッグに関するガイドライン」をご覧ください。

関連トピック

共有のためのデータ形式の選択
コンテンツの共有のガイドラインとチェック リスト
クイック スタート: コンテンツの共有

 

 

表示:
© 2015 Microsoft