Windows10-development-sharing-contract
Windows 10開発-共有契約
この章では、アプリケーション間でデータを共有する方法を学びます。 ユーザーは、誰かと共有したり、別のアプリケーションで使用したりすることに興奮している情報に遭遇することがよくあります。 現在、ユーザーはテクノロジーを使用して他の人とつながり、共有したいと考えています。
ユーザーが共有したい場合があります-
- ソーシャルネットワークとのリンク
- 画像をレポートにコピーする
- ファイルをクラウドストレージにアップロードする
今日のアプリケーションでは、使用するデータをユーザーが共有および交換するためにも使用できるようにする必要があります。 共有は軽量な機能で、UWPアプリケーションに簡単に追加できます。 アプリが他のアプリとデータを交換する方法はいくつかあります。
UWPアプリケーションでは、次の方法で共有機能をサポートできます。
- まず、アプリケーションは、ユーザーが共有したいコンテンツを提供するソースアプリにすることができます。
- 第二に、アプリは、ユーザーが共有コンテンツの宛先として選択するターゲットアプリにすることができます。
- アプリは、ソースアプリとターゲットアプリの両方になることもできます。
コンテンツを共有する
ソースアプリであるアプリケーションからコンテンツを共有するのは非常に簡単です。 共有操作を実行するには、 DataPackage クラスオブジェクトが必要です。 このオブジェクトには、ユーザーが共有したいデータが含まれています。
次のタイプのコンテンツを DataPackage オブジェクトに含めることができます-
- テキストで表示
- ユニフォームリソース識別子(URI)
- HTML
- 書式設定されたテキスト
- ビットマップ
- ファイル
- 開発者定義のデータ
データの共有中に、上記の形式の1つ以上を含めることができます。 アプリケーションで共有をサポートするには、まず DataTransferManager クラスのインスタンスを取得する必要があります。
次に、 DataRequested イベントが発生するたびに呼び出されるイベントハンドラーを登録します。
DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager,
DataRequestedEventArgs>(this.ShareTextHandler);
アプリが DataRequest オブジェクトを受け取ると、アプリケーションはユーザーが共有したいコンテンツを追加する準備ができています。
private void ShareTextHandler(DataTransferManager sender, DataRequestedEventArgs e){
DataRequest request = e.Request;
//The Title is mandatory
request.Data.Properties.Title = "Share Text Example";
request.Data.Properties.Description = "A demonstration that shows how to share text.";
request.Data.SetText("Hello World!");
}
アプリケーションが共有するコンテンツには、2つのプロパティが含まれている必要があります-
- Titleプロパティ。必須であり、設定する必要があります。
- コンテンツ自体。
共有コンテンツの受信
アプリケーションが共有コンテンツを受信できるようにする場合、最初に行う必要があるのは、 Share Contract をサポートすることを宣言することです。 宣言後、システムはアプリケーションがコンテンツを受信できるようにします。
共有契約のサポートを追加するには-
- package.appmanifest ファイルをダブルクリックします。
- *宣言*タブに移動します。 [利用可能な宣言]リストから[ターゲットの共有]を選択し、[追加]ボタンをクリックします。
- アプリケーションがあらゆる種類のファイルを共有コンテンツとして受信するようにする場合は、ファイルの種類とデータ形式を指定できます。
- サポートするデータ形式を指定するには、 Declarations ページの Data Formats セクションに移動して、 Add New をクリックします。
- サポートするデータ形式の名前を入力します。 たとえば、 "Text" 。
- サポートするファイルタイプを指定するには、*宣言*ページの*サポートされているファイルタイプ*セクションで、*新規追加*をクリックします。
- サポートするファイル名拡張子を入力します(例: .pdf )
- すべてのファイル*タイプをサポートする場合は、 *SupportsAnyFileType ボックスをチェックします。
- ユーザーがアプリケーションをデータ共有のターゲットアプリケーションとして選択すると、 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;
}
Webリンクを共有する新しいUWPプロジェクトを作成して、簡単な例を見てみましょう。
以下に、いくつかのプロパティでボタンが作成されるXAMLコードを示します。
<Page
x:Class = "UWPSharingDemo.MainPage"
xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "using:UWPSharingDemo"
xmlns:d = "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable = "d">
<Grid Background = "{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation = "Vertical">
<TextBlock Text = "Share Web Link" Style = "{StaticResource
HeaderTextBlockStyle}" Margin = "30"></TextBlock>
<Button Content = "Invoke share contract" Margin = "10"
Name = "InvokeShareContractButton" Click = "InvokeShareContractButton_Click"
></Button>
</StackPanel>
</Grid>
</Page>
ボタンクリックイベントが実装されているC#コードと、URI共有コードを以下に示します。
using System;
using Windows.ApplicationModel.DataTransfer;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
//The Blank Page item template is documented at
http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409
namespace UWPSharingDemo {
///<summary>
///An empty page that can be used on its own or navigated to within a Frame.
///</summary>
public sealed partial class MainPage : Page {
DataTransferManager dataTransferManager;
public MainPage() {
this.InitializeComponent();
dataTransferManager = DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested += dataTransferManager_DataRequested;
}
void dataTransferManager_DataRequested(DataTransferManager sender,
DataRequestedEventArgs args) {
Uri sharedWebLink = new Uri("https://msdn.microsoft.com");
if (sharedWebLink != null) {
DataPackage dataPackage = args.Request.Data;
dataPackage.Properties.Title = "Sharing MSDN link";
dataPackage.Properties.Description = "The Microsoft Developer Network (MSDN)
is designed to help developers write applications using Microsoft
products and technologies.";
dataPackage.SetWebLink(sharedWebLink);
}
}
private void InvokeShareContractButton_Click(object sender, RoutedEventArgs e) {
DataTransferManager.ShowShareUI();
}
}
}
上記のコードをコンパイルして実行すると、エミュレーターに次のページが表示されます。
ボタンをクリックすると、どのアプリケーションで共有するかのオプションが表示されます。
メッセージングをクリックすると、次のウィンドウが表示され、そこから誰にでもリンクを送信できます。