この記事では、パッケージ アプリを Windows 共有 機能と統合する方法について説明します。 MSIX でパッケージ化されたアプリは、パッケージ ID を持ち、共有ターゲットとして登録する準備ができています。 共有機能を使用すると、ユーザーはアプリ間でコンテンツを共有できます。 パッケージ アプリは、アプリ内の共有ファイルを受信して処理するために、共有ターゲットとして登録されます。
共有ターゲットとは
共有ターゲットは、Windows 8 で導入された機能であり、アプリが別のアプリからデータを受信できるようにします。 共有ターゲットはクリップボードのように機能しますが、動的コンテンツを使用します。
既定の共有ターゲット登録が Win32 アプリで動作するためには、アプリにパッケージ ID が必要です。また、共有引数を ShareTargetActivatedEventArgs (ソース アプリのライブ オブジェクト) として処理する必要があります。 ターゲット アプリに送信される静的メモリ コンテンツではありません。
注
C++ アプリでは、 GetCurrentPackageFullName API を使用して、実行中のアプリにパッケージ ID があるかどうかを確認します。 パッケージ ID で実行されていない場合、API は APPMODEL_ERROR_NO_PACKAGE エラー コードを返します。
[前提条件]
ShareTargetActivatedEventArgsをサポートするには、アプリで Windows 10 バージョン 2004 (ビルド 10.0.19041.0) 以降を対象にする必要があります。 これは、この機能の最小ターゲット バージョンです。
共有ターゲットとして登録する
アプリで共有コントラクトを実装するには、2 つの手順が必要です。
appxmanifest に共有ターゲット拡張機能を追加する
Visual Studio のソリューション エクスプローラーで、ソリューションのパッケージ 化プロジェクトの package.appxmanifest ファイルを開き、共有ターゲット拡張機能を追加します。
<Extensions>
<uap:Extension
Category="windows.shareTarget">
<uap:ShareTarget>
<uap:SupportedFileTypes>
<uap:SupportsAnyFileType />
</uap:SupportedFileTypes>
<uap:DataFormat>Bitmap</uap:DataFormat>
</uap:ShareTarget>
</uap:Extension>
</Extensions>
アプリケーションでサポートされているサポートされているデータ形式を DataFormat 構成に追加します。 この場合、アプリは画像の共有をサポートしているため、 DataFormat は Bitmapに設定されます。
共有イベントの引数を取得する
Windows 10 バージョン 1809 以降では、パッケージ アプリは AppInstance.GetActivatedEventArgs メソッドを呼び出して、起動時に特定の種類のアプリのアクティブ化情報を取得できます。 たとえば、このメソッドを呼び出して、アプリのアクティブ化に関する情報を取得できます。ファイルを開くか、対話型トーストをクリックするか、登録済みのプロトコルを使用してトリガーされたか。
ただし、 ShareTargetActivatedEventArgs のアクティブ化情報は、Windows 10 バージョン 2004 以降でのみサポートされています。 そのため、アプリケーションは、この特定の最小バージョンのデバイスをターゲットにする必要があります。
Windows App SDK の実装を確認するには、OnLaunchedの メソッドを参照してください。
他のパッケージ アプリについては、アプリケーションの Main メソッドで、 AppInstance.GetActivatedEventArgsを確認します。
public static void Main(string[] cmdArgs)
{
...
if (isRunningWithIdentity())
{
var activationArgs = AppInstance.GetActivatedEventArgs();
if (activationArgs != null)
{
switch (activationArgs.Kind)
{
case ActivationKind.Launch:
HandleLaunch(activationArgs as LaunchActivatedEventArgs);
break;
case ActivationKind.ToastNotification:
HandleToastNotification(activationArgs as ToastNotificationActivatedEventArgs);
break;
case ActivationKind.ShareTarget:
HandleShareAsync(activationArgs as ShareTargetActivatedEventArgs);
break;
default:
HandleLaunch(null);
break;
}
}
}
}
完全な実装については、 フォト ストアデモ アプリを参照してください。
共有ファイルの処理
次のコード スニペットは、パッケージ アプリで共有ファイルを処理する方法を示しています。 コード スニペットは、前の例でアプリが共有ターゲットとしてアクティブ化されたときに呼び出される HandleShareAsync メソッドの一部です。
static async void HandleShareAsync(ShareTargetActivatedEventArgs args)
{
ShareOperation shareOperation = args.ShareOperation;
shareOperation.ReportStarted();
if (shareOperation.Data.Contains(
Windows.ApplicationModel.DataTransfer.StandardDataFormats.StorageItems))
{
try
{
IReadOnlyList<IStorageItem> items = await shareOperation.Data.GetStorageItemsAsync();
var file = (IStorageFile)items[0];
string path = file.Path;
var image = new ImageFile(path);
image.AddToCache();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
shareOperation.ReportCompleted();
// app launch code
}
こちらも参照ください
Windows developer