MSDN Library
콘텐츠의 테이블 축소
콘텐츠의 테이블 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 공유 선택기 확장

2014-06-18

적용 대상: Windows Phone 8 및 Windows Phone Silverlight 8.1 | Windows Phone OS 7.1

 

이 항목에서는 사용자가 보고 있는 사진을 공유하기 위한 앱을 선택할 수 있는 페이지인 공유 선택기에 사진 편집 앱을 표시하는 방법에 대해 설명합니다. 사용자에게 사진을 선택하라는 메시지를 표시하지 않고도 앱에서 해당 사진에 액세스하는 방법을 알아보세요. 이 확장성은 사진이 JPG 파일일 때만 사용할 수 있습니다. 사진 환경을 확장할 수 있는 다른 방법에 대한 자세한 내용은 Windows Phone 8의 사진 확장성을 참조하세요.

참고참고:

이 항목에 나오는 코드 대부분은 사진 확장성 샘플에서 가져온 것입니다.

이 기능은 웹 서비스에 사진을 공유하는 앱에 사용할 수 있습니다. 앱이 Windows Phone 스토어 에서 인증을 받을 수 있도록 하려면 Windows Phone의 특정 앱 유형에 대한 추가 요구 사항을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

공유 선택기는 기본 제공 사진 뷰어에 표시됩니다. 공유 링크를 탭하여 앱 바에서 공유 선택기를 실행합니다. Windows Phone 8 부터는 다른 앱에서도 공유 선택기를 실행할 수 있습니다. 자세한 내용은 Windows Phone 8의 공유 미디어 작업 사용 방법을 참조하세요.

다음 이미지는 사진 뷰어의 공유 링크 및 공유 선택기 확장(이 항목의 뒷부분에 설명됨)의 이름을 보여 줍니다.

Extending the photo viewer share link.

다음 단계에서는 공유 선택기에 앱을 통합하는 방법에 대해 설명합니다.

미디어 라이브러리의 사진에 액세스하려면 미디어 라이브러리 기능을 지정합니다. 기능은 앱 매니페스트 파일 WMAppManifest.xml에서 지정합니다.

Windows Phone 8 앱의 경우 ID_CAP_MEDIALIB_PHOTO 기능을 사용합니다.

<!-- For accessing photos in the media library. -->
<Capability Name="ID_CAP_MEDIALIB_PHOTO" />

Windows Phone OS 7.1 앱의 경우 ID_CAP_MEDIALIB 기능을 사용합니다.

<!-- For accessing photos in the media library. -->
<Capability Name="ID_CAP_MEDIALIB" />

공유 선택기에 표시하려면 Photos_Extra_Share 확장을 등록합니다. 확장은 WMAppManifest.xml에서 지정합니다. Tokens 요소 바로 뒤 Extensions 요소 내에서 다음 Extension 요소를 사용하여 공유 선택기 확장을 지정합니다.

<Extension ExtensionName="Photos_Extra_Share" 
           ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" 
           TaskID="_default" />

Windows Phone 매니페스트 디자이너는 확장을 지원하지 않으므로 XML(텍스트) 편집기를 사용하여 확장을 편집합니다. 자세한 내용은 Windows Phone 8의 앱 매니페스트 파일을 수정하는 방법을 참조하세요.

사용자가 공유 선택기에서 앱을 탭하면 앱을 열고 사용자가 보고 있는 사진에 대한 토큰이 전송되도록 딥 링크 URI가 실행됩니다. URI에 ShareContentFileId 문자열이 포함되면 앱에서 공유 선택기 실행을 감지할 수 있습니다. 다음 예제는 공유 선택기의 실행 URI입니다(기본 탐색 페이지가 MainPage.xaml인 경우 URI 매퍼에서 확인됨).

/MainPage.xaml?Action=ShareContent&FileId=%7BA3D54E2D-7977-4E2B-B92D-3EB126E5D168%7D

이 예제에서는 FileId 매개 변수 값이 토큰입니다. 이 문자열을 사용해 미디어 라이브러리에서 사진을 검색할 수 있습니다. 이 작업은 이 항목 뒷부분에서 설명합니다.

공유 선택기가 기본 탐색 페이지(이 경우 MainPage.xaml)를 대상으로 하므로 아무 URI 매핑도 구현하지 않은 경우 해당 페이지가 실행됩니다. 앱의 기본 탐색 페이지가 토큰에서 참조된 사진을 공유할 수 있는 경우 URI 매핑이 필요하지 않을 수 있습니다.

단, 사진 공유를 위해 다른 페이지를 실행하려면 URI를 해당 페이지에 매핑해야 합니다. 다음 예제에서는 사용자 지정 URI 매퍼 클래스를 사용해 이 작업을 수행하는 방법을 보여 줍니다.


using System;
using System.Windows.Navigation;

namespace CustomMapping
{
    class CustomUriMapper : UriMapperBase
    {
        public override Uri MapUri(Uri uri)
        {
            string tempUri = uri.ToString();
            string mappedUri;

            // Launch from the photo share picker.
            // Incoming URI example: /MainPage.xaml?Action=ShareContent&FileId=%7BA3D54E2D-7977-4E2B-B92D-3EB126E5D168%7D
            if ((tempUri.Contains("ShareContent")) && (tempUri.Contains("FileId")))
            {
                // Redirect to PhotoShare.xaml.
                mappedUri = tempUri.Replace("MainPage", "PhotoShare");
                return new Uri(mappedUri, UriKind.Relative);
            }

            // Otherwise perform normal launch.
            return uri;
        }
    }
}


이 예제에서 URI 매퍼는 URI 내 페이지 이름을 대체하여 수신 URI를 이름이 PhotoShare.xaml인 페이지에 매핑합니다. 해당 메서드에서 반환된 URI는 앱이 시작될 때 첫 번째 페이지를 실행하기 위해 앱의 루트 프레임에서 사용됩니다. 루트 프레임은 앱이 초기화될 때 할당되므로 사용자 지정 URI 매퍼를 사용합니다. 다음 코드에서는 URI 매퍼가 App.xaml.cs 파일의 InitializePhoneApplication 메서드에 할당되는 방법을 보여 줍니다.


private void InitializePhoneApplication()
{
    if (phoneApplicationInitialized)
        return;

    // Create the frame but don't set it as RootVisual yet; this allows the splash
    // screen to remain active until the application is ready to render.
    RootFrame = new PhoneApplicationFrame();
    RootFrame.Navigated += CompleteInitializePhoneApplication;

    // Handle navigation failures
    RootFrame.NavigationFailed += RootFrame_NavigationFailed;

    // Assign the custom URI mapper class to the application frame.
    RootFrame.UriMapper = new CustomMapping.CustomUriMapper();

    // Ensure we don't initialize again
    phoneApplicationInitialized = true;
}


실행된 페이지는 페이지 NavigationContext 개체의 QueryString 속성을 사용하여 페이지를 실행한 URI의 모든 매개 변수에 액세스할 수 있습니다. 다음 예제에서는 FileId 매개 변수 값을 MediaLibraryGetPictureFromToken(String) 메서드와 함께 사용하여 미디어 라이브러리에서 사진을 추출하는 방법을 보여 줍니다. 이 코드는 사진 확장성 샘플의 PhotoShare.xaml.cs 파일에서 가져온 것입니다.


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Get a dictionary of query string keys and values.
    IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;

    // Ensure that there is at least one key in the query string, and check whether the "FileId" key is present.
    if (queryStrings.ContainsKey("FileId"))
    {
        // Retrieve the photo from the media library using the FileID passed to the app.
        MediaLibrary library = new MediaLibrary();
        Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["FileId"]);

        // Create a BitmapImage object and add set it as the image control source.
        // To retrieve a full-resolution image, use the GetImage() method instead.
        BitmapImage bitmapFromPhoto = new BitmapImage();
        bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
        image1.Source = bitmapFromPhoto;
    }
}


이 예제에서는 Picture 클래스의 확장 메서드인 PhoneExtensionsGetPreviewImage()를 사용합니다. 이 메서드는 휴대폰 화면을 채우도록 최적화된 해상도(WVGA, WXGA 또는 720p)의 큰 축소판 그림을 반환합니다. 전체 해상도 이미지를 공유하려면 PictureGetImage() 메서드를 사용합니다.

이 절차에서는 공유 선택기에서 앱을 실행하는 방법에 대해 설명합니다. Windows Phone 8 에뮬레이터 에서 테스트하는 경우 휴대폰을 준비하는 절차를 건너뛸 수 있습니다.

참고참고:

Windows Phone OS 7.1 앱을 디버깅할 때 앱을 다시 실행하면 첫 번째 앱 인스턴스의 디버깅 프로세스가 중단된다는 점에 유의하세요. 또한 Emulator 7.1에서는 사진 확장성 테스트가 지원되지 않습니다. 이 에뮬레이터에는 사진 허브가 포함되어 있지 않습니다.

테스트를 위해 휴대폰을 준비하려면

  1. Windows Phone 8 에뮬레이터 에서 확장성을 테스트하는 경우 이 절차를 건너뛸 수 있으며, 다음 절차로 이동할 수 있습니다. 휴대폰에서 테스트하는 경우에는 이 절차를 수행합니다.

  2. 휴대폰에 사진이 있는지, Windows Phone 카메라로 사진을 찍었는지 확인합니다.

  3. 휴대폰을 컴퓨터에 연결하고 컴퓨터가 휴대폰을 인식할 때까지 기다립니다.

  4. 이 단계는 Windows Phone OS 7.1 에만 해당합니다. Windows Phone에서 사진 선택기 또는 카메라 캡처 작업을 사용하는 앱을 테스트하는 방법에 설명된 대로 WPConnect.exe 도구를 실행합니다. 이 도구는 휴대폰의 미디어 데이터베이스로부터 Zune 소프트웨어의 연결을 해제합니다. WPConnect.exe를 통해 휴대폰이 컴퓨터에 연결되어 있는 동안 사진 허브를 사용할 수 있습니다.

공유 선택기 확장성을 테스트하려면

  1. 메뉴에서 디버그를 선택하고 디버깅 시작을 선택합니다.

  2. 시작을 탭하여 시작 화면으로 이동합니다.

  3. 시작 화면에서 사진 앱을 탭한 후 사진을 선택하고 사진 뷰어에서 사진을 봅니다.

  4. 페이지 아래쪽의 앱 바에서 점 세 개를 탭합니다. 앱 바가 확장되면 공유 링크를 탭합니다.

  5. 공유 페이지에서 앱을 탭하여 실행합니다. 이렇게 하면 방금 보던 사진의 토큰이 포함된 URI가 실행됩니다. 사진 확장성 샘플로 테스트하고 있는 경우 PhotoShare.xaml 페이지가 실행되고 방금 보고 있던 사진이 표시됩니다.

표시:
© 2016 Microsoft