언어: HTML | XAML

빠른 시작: 콘텐츠 자동 실행을 위해 앱 등록(XAML)

Applies to Windows only

자동 실행 콘텐츠 이벤트에 대한 옵션으로 앱을 등록할 수 있습니다. 자동 실행 콘텐츠 이벤트는 카메라 메모리 카드, 썸 드라이브(thumb drive) 또는 DVD 같은 볼륨 장치가 PC에 삽입될 때 발생합니다.

로드맵: 이 항목은 다음 항목과 연관되어 있습니다. 참고 항목:

여기서는 카메라에서 볼륨 장치가 삽입될 때 앱을 자동 실행 옵션으로 식별하는 방법을 보여 줍니다.

목표: 자동 실행 콘텐츠 이벤트를 처리할 앱을 만듭니다.

사전 요구 사항

Microsoft Visual Studio

지침

1. 새 프로젝트를 만들고 AutoPlay 선언을 추가합니다.

  1. Visual Studio를 열고 파일 메뉴에서 새 프로젝트를 선택합니다. Visual C# 섹션에서 Windows 스토어를 선택합니다. 앱의 이름을 AutoPlayDisplayOrCopyImages로 지정하고 확인을 클릭합니다.
  2. Package.appxmanifest 파일을 열고 기능 탭을 선택합니다. 이동식 저장소사진 라이브러리 기능을 선택합니다. 이렇게 하면 앱이 카메라 메모리용 이동식 저장 장치와 로컬 사진에 액세스할 수 있습니다.
  3. 매니페스트 파일에서 선언 탭을 선택합니다. 사용 가능한 선언 드롭다운 목록에서 자동 실행 콘텐츠를 선택하고 추가를 클릭합니다. 지원되는 선언 목록에 추가된 새 자동 실행 콘텐츠 항목을 선택합니다.
  4. 콘텐츠 자동 실행 선언은 자동 실행에서 콘텐츠 이벤트를 발생시킬 때 옵션으로 앱을 식별합니다. 이벤트는 볼륨 장치(예: DVD 또는 USB 드라이브)의 콘텐츠를 기반으로 합니다. 자동 실행은 볼륨 장치의 콘텐츠를 검사한 후 발생시킬 콘텐츠 이벤트를 결정합니다. 볼륨의 루트에 DCIM, AVCHD 또는 PRIVATE\ACHD 폴더가 포함되어 있거나 사용자가 자동 실행 제어판에서 각 미디어 유형으로 수행할 작업 선택을 사용하도록 설정하고 볼륨의 루트에 사진이 있는 경우 자동 실행은 ShowPicturesOnArrival 이벤트를 발생시킵니다.

    시작 작업 섹션에서 첫 번째 시작 작업에 대해 다음 값을 입력합니다.

    설정
    동사show
    작업 표시 이름사진 표시
    콘텐츠 이벤트ShowPicturesOnArrival

     

    작업 표시 이름 설정은 자동 실행이 앱에 대해 표시하는 문자열을 식별합니다. 동사 설정은 선택한 옵션에 대해 앱에 전달된 값을 식별합니다. 자동 실행 이벤트에 대해 여러 개의 시작 작업을 지정하고 동사 설정을 사용하여 사용자가 앱에 대해 선택한 옵션을 확인할 수 있습니다. 앱에 전달된 시작 이벤트 인수의 verb 속성을 확인하여 사용자가 선택한 옵션을 알 수 있습니다. 동사 설정에는 예약된 open을 제외한 모든 값을 사용할 수 있습니다.

  5. 콘텐츠 자동 실행 항목의 시작 작업 섹션에서 새로 추가를 클릭하여 두 번째 시작 작업을 추가합니다. 두 번째 시작 작업에 대해 다음 값을 입력합니다.
    설정
    동사copy
    작업 표시 이름Copy Pictures Into Library(사진을 라이브러리로 복사)
    콘텐츠 이벤트ShowPicturesOnArrival

     

  6. 사용 가능한 선언 드롭다운 목록에서 파일 형식 연결을 선택하고 추가를 클릭합니다. 새 파일 형식 연결 선언에서 표시 이름 필드를 AutoPlay Copy or Show Images로 설정하고 이름 필드를 image_association1로 설정합니다. 지원되는 파일 형식 섹션에서 새로 추가를 클릭합니다. 파일 형식 필드를 .jpg로 설정합니다. 지원되는 파일 형식 섹션에서 새 파일 연결의 파일 형식 필드를 .png로 설정합니다. 콘텐츠 이벤트의 경우 자동 실행이 앱에 명시적으로 연결되지 않은 파일 형식을 필터링합니다.
  7. 매니페스트 파일을 저장하고 닫습니다.

2. XAML UI 추가

  • MainPage.xaml 파일을 열고 다음 XAML을 기본 <Grid> 섹션에 추가합니다.
    
    <TextBlock FontSize="18">File List</TextBlock>
    <TextBlock x:Name="FilesBlock" HorizontalAlignment="Left" TextWrapping="Wrap" 
               VerticalAlignment="Top" Margin="0,20,0,0" Height="280" Width="240" />
    <Canvas x:Name="FilesCanvas" HorizontalAlignment="Left" VerticalAlignment="Top" 
            Margin="260,20,0,0" Height="280" Width="100"/>
    
    
    

3. 초기화 코드 추가

이 단계의 코드는 OnFileActivated 이벤트 중 앱에 전달된 시작 인수에 중 하나인 Verb 속성에서 동사 값을 확인합니다. 그러면 코드는 사용자가 선택한 옵션과 관련된 메서드를 호출합니다. 카메라 메모리 이벤트의 경우 자동 실행은 카메라 저장소의 루트 폴더를 앱에 전달합니다. Files 속성의 첫 번째 요소에서 이 폴더를 검색할 수 있습니다.

  1. App.xaml.cs 또는 App.xaml.vb 파일을 열고 App 클래스에 다음 코드를 추가합니다.
    
    protected override void OnFileActivated(FileActivatedEventArgs args)
    {
        if (args.Verb == "show")
        {
            Frame rootFrame = (Frame)Window.Current.Content;
            MainPage page = (MainPage)rootFrame.Content;
    
            // Call DisplayImages with root folder from camera storage.
            page.DisplayImages((Windows.Storage.StorageFolder)args.Files[0]);
        }
    
        if (args.Verb == "copy")
        {
            Frame rootFrame = (Frame)Window.Current.Content;
            MainPage page = (MainPage)rootFrame.Content;
    
            // Call CopyImages with root folder from camera storage.
            page.CopyImages((Windows.Storage.StorageFolder)args.Files[0]);
        }
    
        base.OnFileActivated(args);
    }
    
    
    
  2. App.xaml.cs 파일을 저장하고 닫습니다.

4. 이미지 표시 코드 추가

  • MainPage.xaml.cs 또는 MainPage.xaml.vb 파일에서 다음 코드를 MainPage 클래스에 추가합니다.
    
    async internal void DisplayImages(Windows.Storage.StorageFolder rootFolder)
    {
        // Display images from first folder in root\DCIM.
        var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
        var folderList = await dcimFolder.GetFoldersAsync();
        var cameraFolder = folderList[0];
        var fileList = await cameraFolder.GetFilesAsync();
        for (int i = 0; i < fileList.Count; i++)
        {
            var file = (Windows.Storage.StorageFile)fileList[i];
            WriteMessageText(file.Name + "\n");
            DisplayImage(file, i);
        }
    }
    
    async private void DisplayImage(Windows.Storage.IStorageItem file, int index)
    {
        try
        {
            var sFile = (Windows.Storage.StorageFile)file;
            Windows.Storage.Streams.IRandomAccessStream imageStream =
                await sFile.OpenAsync(Windows.Storage.FileAccessMode.Read);
            Windows.UI.Xaml.Media.Imaging.BitmapImage imageBitmap =
                new Windows.UI.Xaml.Media.Imaging.BitmapImage();
            imageBitmap.SetSource(imageStream);
            var element = new Image();
            element.Source = imageBitmap;
            element.Height = 100;
            Thickness margin = new Thickness();
            margin.Top = index * 100;
            element.Margin = margin;
            FilesCanvas.Children.Add(element);
        }
        catch (Exception e)
        {
           WriteMessageText(e.Message + "\n");
        }
    }
    
    // Write a message to MessageBlock on the UI thread.
    private Windows.UI.Core.CoreDispatcher messageDispatcher = Window.Current.CoreWindow.Dispatcher;
    
    private void WriteMessageText(string message, bool overwrite = false)
    {
        messageDispatcher.InvokeAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,
            (s, a) =>
            {
                if (overwrite)
                    FilesBlock.Text = message;
                else
                    FilesBlock.Text += message;
            }, this, null);
    }
    
    
    

5. 이미지 복사 코드 추가

  • MainPage.xaml.cs 또는 MainPage.xaml.vb 파일에서 다음 코드를 MainPage 클래스에 추가합니다.
    
    async internal void CopyImages(Windows.Storage.StorageFolder rootFolder)
    {
        // Copy images from first folder in root\DCIM.
        var dcimFolder = await rootFolder.GetFolderAsync("DCIM");
        var folderList = await dcimFolder.GetFoldersAsync();
        var cameraFolder = folderList[0];
        var fileList = await cameraFolder.GetFilesAsync();
    
        try
        {
            var folderName = "Images " + DateTime.Now.ToString("yyyy-MM-dd HHmmss");
            Windows.Storage.StorageFolder imageFolder = await
                Windows.Storage.KnownFolders.PicturesLibrary.CreateFolderAsync(folderName);
    
            foreach (Windows.Storage.IStorageItem file in fileList)
            {
                CopyImage(file, imageFolder);
            }
        }
        catch (Exception e)
        {
            WriteMessageText("Failed to copy images.\n" + e.Message + "\n");
        }
    }
    
    async internal void CopyImage(Windows.Storage.IStorageItem file,
                                  Windows.Storage.StorageFolder imageFolder)
    {
        try
        {
            Windows.Storage.StorageFile sFile = (Windows.Storage.StorageFile)file;
            await sFile.CopyAsync(imageFolder, sFile.Name);
            WriteMessageText(sFile.Name + " copied.\n");
        }
        catch (Exception e)
        {
            WriteMessageText("Failed to copy file.\n" + e.Message + "\n");
        }
    }
    
    
    

6. 응용 프로그램 빌드 및 실행

  1. F5를 눌러 앱을 빌드하고 배포합니다(디버그 모드).
  2. 앱을 실행하려면 카메라 메모리 카드나 카메라의 다른 저장 장치를 PC에 삽입합니다. 그런 다음 자동 실행 옵션 목록에서 package.appxmanifest 파일에 지정한 콘텐츠 이벤트 옵션 중 하나를 선택합니다. 이 샘플 코드에서는 카메라 메모리 카드의 DCIM 폴더에 있는 사진을 표시하거나 복사하기만 합니다. 카메라 메모리 카드에서 사진을 AVCHD 또는 PRIVATE\ACHD 폴더에 저장하는 경우 그에 따라 코드를 업데이트해야 합니다.

    참고  카메라 메모리 카드가 없는 경우 루트에 DCIM이라는 폴더가 있고 DCIM 폴더에 이미지가 포함된 하위 폴더가 있는 경우 플래시 드라이브를 사용할 수 있습니다.

요약 및 다음 단계

이 자습서에서는 이미지 파일을 표시하거나 사진에 복사하는 앱을 만들었습니다. 그리고 ShowPicturesOnArrival 콘텐츠 자동 실행 이벤트에 대해 앱을 등록했습니다.

자동 실행에서는 근접 연결(탭하기)을 사용하여 PC 간에 공유된 콘텐츠에 대해 콘텐츠 이벤트를 발생시킵니다. 이 빠른 시작의 단계와 코드를 사용하여 근접 연결을 사용하는 PC 간에 공유되는 파일을 처리할 수 있습니다. 다음 표에는 근접 연결을 사용하여 콘텐츠를 공유하는 데 사용할 수 있는 자동 실행 콘텐츠 이벤트가 나열되어 있습니다.

작업콘텐츠 자동 실행 이벤트
음악 공유PlayMusicFilesOnArrival
동영상 공유PlayVideoFilesOnArrival

 

파일이 근접 연결을 사용하여 공유되는 경우 FileActivatedEventArgs 개체의 Files 속성에 모든 공유 파일이 있는 루트 폴더에 대한 참조가 포함됩니다.

관련 항목

자동 실행을 사용한 자동 시작
C# 또는 Visual Basic으로 작성한 Windows 런타임 앱용 로드맵

 

 

표시:
© 2015 Microsoft