次の方法で共有


パッケージ アプリを Windows Share と統合する

この記事では、パッケージ アプリを Windows Share 機能と統合する方法について説明します。 MSIX でパッケージ化されたアプリは、パッケージ ID を持ち、共有対象として登録する準備ができています。 Share 機能を使用すると、ユーザーはアプリ間でコンテンツを共有できます。 パッケージ アプリは、アプリ内の共有ファイルを受信して処理するために、共有対象として登録されます。

共有対象とは

共有対象は、Windows 8 で導入された機能であり、アプリが別のアプリからデータを受信できるようにします。 共有対象はクリップボードのように機能しますが、動的コンテンツを使用します。

既定の共有対象登録が Win32 アプリで動作するためには、アプリにパッケージ ID が必要です。また、共有引数を ShareTargetActivatedEventArgs (ソース アプリのライブ オブジェクト) として処理する必要があります。 対象のアプリに送信される静的メモリ コンテンツではありません。

Note

C++ アプリでは、GetCurrentPackageFullName API を使用して、実行中のアプリにパッケージ ID があるか確認します。 API は、パッケージ ID で実行されていない場合に APPMODEL_ERROR_NO_PACKAGE エラー コードを返します。

前提条件

ShareTargetActivatedEventArgs をサポートするには、アプリが Windows 10 バージョン 2004 (ビルド 10.0.19041.0) 以降を対象とする必要があります。 これは、この機能の最小対象バージョンです。

共有対象として登録する

アプリで Share コントラクトを実装するには、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 構成に追加します。 この場合、アプリは画像の共有をサポートしているため、DataFormatBitmap に設定されます。

Share イベント引数をフェッチする

Windows 10 Version 1809 以降、パッケージ化されたアプリで AppInstance.GetActivatedEventArgs メソッドを呼び出して、スタートアップ時にアプリの特定の種類のアクティブ化情報を取得できるようになりました。 たとえば、このメソッドを呼び出して、アプリのアクティブ化に関する情報や、ファイルを開いたり、対話型のトーストをクリックしたり、登録済みのプロトコルを使用したりしたかどうかを確認できます。

ただし、ShareTargetActivatedEventArgs アクティブ化情報は、Windows 10 Version 2004 以降でのみサポートされています。 そのため、アプリケーションは、この特定の最小バージョンのデバイス対象とする必要があります。

Windows アプリ 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;
            }
        }
    }
}

完全な実装については、Photo Store Demo アプリを参照してください。

共有ファイルの処理

次のコード スニペットは、パッケージ アプリで共有ファイルを処理する方法を示しています。 コード スニペットは、前の例でアプリが共有対象としてアクティブ化されたときに呼び出される 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
}

関連項目