다음을 통해 공유


Windows Share와 패키징된 앱 통합

이 문서에서는 패키징된 앱을 Windows Share 기능과 통합하는 방법을 설명합니다. MSIX로 패키징된 앱에는 패키지 ID가 있으며 공유 대상으로 등록할 준비가 되어 있습니다. Share 기능을 사용하면 사용자가 한 앱에서 다른 앱으로 콘텐츠를 공유할 수 있습니다. 패키징된 앱은 앱 내에서 공유 파일을 수신하고 처리하기 위해 공유 대상으로 등록됩니다.

공유 대상이란?

공유 대상은 Windows 8에서 도입된 기능이며 앱이 다른 앱으로부터 데이터를 받을 수 있도록 합니다. 공유 대상은 클립보드처럼 작동하지만 동적 콘텐츠를 다룹니다.

기본 공유 대상 등록이 Win32 앱에서 작동하려면 앱에 패키지 ID가 있어야 하며 공유 인수를 소스 앱의 라이브 객체인 ShareTargetActivatedEventArgs로 처리해야 합니다. 대상 앱으로 전송되는 정적 메모리 콘텐츠가 아닙니다.

참고 항목

C++ 앱에서 GetCurrentPackageFullName API를 사용하여 실행 중인 앱에 패키지 ID가 있는지 확인합니다. API는 패키지 ID를 사용하여 실행되지 않는 경우 APPMODEL_ERROR_NO_PACKAGE 오류 코드를 반환합니다.

필수 조건

ShareTargetActivatedEventArgs을(를) 지원하려면 앱이 Windows 10 버전 2004(빌드 10.0.19041.0) 이상을 대상으로 해야 합니다. 이 기능의 최소 대상 버전입니다.

공유 대상으로 등록

앱에서 Share 계약을 구현하는 데 필요한 두 단계가 있습니다.

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 앱 SDK 구현을 보려면 Share Target 샘플 앱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
}

참고 항목