언어: HTML | XAML

빠른 시작: 자동 실행 장치를 위해 앱 등록(XAML)

Applies to Windows only

앱을 자동 실행 장치 이벤트에 대한 옵션으로 등록할 수 있습니다. 자동 실행 장치 이벤트는 장치가 PC에 연결될 때 발생합니다.

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

여기에서는 카메라가 PC에 연결될 때 앱을 자동 실행 옵션으로 식별하는 방법을 보여 줍니다. 앱은 WPD\ImageSource자동 실행 이벤트에 대한 처리기로 등록됩니다. 이는 카메라 및 기타 이미징 장치가 MTP를 사용하는 ImageSource임을 알릴 경우 WPD(Windows 휴대용 장치)에서 발생하는 일반적인 이벤트입니다. 자세한 내용은 Windows 휴대용 장치를 참조하세요.

장치 제조업체이며 해당 Windows 스토어 장치 앱을 장치의 자동 실행 처리기로 연결하려는 경우 장치 메타데이터에서 앱을 식별할 수 있습니다. 장치의 환경 ID에 대해 자동 설치된 앱으로 앱을 연결하면 장치가 PC에 연결될 때 운영 체제에서 해당 연결을 검색합니다. PC에 앱이 설치되어 있지 않으면 운영 체제에서 앱을 자동으로 다운로드하여 설치합니다. 자동 실행에서는 사용자가 장치의 처리기로 선택할 수 있는 첫 번째 옵션으로 앱을 제공합니다. 자세한 내용은 Windows 스토어 장치 앱의 자동 실행을 참조하세요.

목표: 앱을 만들어 자동 실행 장치 이벤트를 처리합니다.

사전 요구 사항

Microsoft Visual Studio

지침

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

  1. Visual Studio를 열고 파일 메뉴에서 새 프로젝트를 선택합니다. Visual C# 또는 Visual Basic 섹션에서 Windows 스토어를 선택합니다. 앱의 이름을 AutoPlayDevice_Camera로 지정하고 확인을 클릭합니다.
  2. Package.appxmanifest 파일을 열고 기능 탭을 선택합니다. 이동식 저장소 기능을 선택합니다. 이렇게 하면 앱이 이동식 저장 볼륨 장치로 카메라의 데이터에 액세스할 수 있습니다.
  3. 매니페스트 파일에서 선언 탭을 선택합니다. 사용 가능한 선언 드롭다운 목록에서 장치 자동 실행을 선택하고 추가를 클릭합니다. 지원되는 선언 목록에 추가된 새 장치 자동 실행 항목을 선택합니다.
  4. 장치 자동 실행 선언은 자동 실행에서 알려진 이벤트에 대해 장치 이벤트를 발생시킬 때 옵션으로 앱을 식별합니다.

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

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

     

    작업 표시 이름 설정은 자동 실행이 앱에 대해 표시하는 문자열을 식별합니다. 동사 설정은 선택한 옵션에 대해 앱에 전달된 값을 식별합니다. 자동 실행 이벤트에 대해 여러 개의 시작 작업을 지정하고 동사 설정을 사용하여 사용자가 앱에 대해 선택한 옵션을 확인할 수 있습니다. 앱에 전달된 시작 이벤트 인수의 verb 속성을 확인하여 사용자가 선택한 옵션을 알 수 있습니다. 동사 설정에는 예약된 open을 제외한 모든 값을 사용할 수 있습니다. 단일 앱에서 여러 동사를 사용하는 예제는 빠른 시작: 콘텐츠 자동 실행을 위해 앱 등록을 참조하세요.

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

2. XAML UI 추가

  • MainPage.xaml 파일을 열고 다음 XAML을 기본 <Grid> 섹션에 추가합니다.
    
    <StackPanel Orientation="Vertical" Margin="10,0,-10,0">
        <TextBlock FontSize="24">Device Information</TextBlock>
        <StackPanel Orientation="Horizontal">
            <TextBlock x:Name="DeviceInfoTextBlock" FontSize="18" Height="400" Width="400" VerticalAlignment="Top" />
            <ListView x:Name="ImagesList" HorizontalAlignment="Left" Height="400" VerticalAlignment="Top" Width="400">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical">
                            <Image Source="{Binding Path=Source}" />
                            <TextBlock Text="{Binding Path=Name}" />
                        </StackPanel>
                    </DataTemplate>
                </ListView.ItemTemplate>
                <ListView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <WrapGrid Orientation="Horizontal" ItemHeight="100" ItemWidth="120"></WrapGrid>
                    </ItemsPanelTemplate>
                </ListView.ItemsPanel>
            </ListView>
        </StackPanel>
    </StackPanel>
    
    
    

3. 활성화 코드 추가

이 단계의 코드는 카메라의 장치 정보 ID를 FromId 메서드에 전달하여 카메라를 StorageDevice로 참조합니다. 카메라의 장치 정보 ID는 먼저 이벤트 인수를 DeviceActivatedEventArgs로 캐스팅한 다음 DeviceInformationId 속성에서 값을 가져와 얻을 수 있습니다.

  • App.xaml.cs 또는 App.xaml.vb 파일을 열고 App 클래스에 다음 코드를 추가합니다.
    
    protected override void OnActivated(IActivatedEventArgs args)
    {
        if (args.Kind == ActivationKind.Device)
        {
            Frame rootFrame = null;
            // Ensure that the current page exists and is activated
            if (Window.Current.Content == null)
            {
                rootFrame = new Frame();
                rootFrame.Navigate(typeof(MainPage));
                Window.Current.Content = rootFrame;
            }
            else
            {
                rootFrame = Window.Current.Content as Frame;
            }
            Window.Current.Activate();
    
            // Reference the current page as type MainPage
            var mPage = rootFrame.Content as MainPage;
    
            // Cast the activated event args as DeviceActivatedEventArgs and show images
            var deviceArgs = args as DeviceActivatedEventArgs;
            if (deviceArgs != null)
            {
                mPage.ShowImages(Windows.Devices.Portable.StorageDevice.FromId(deviceArgs.DeviceInformationId));
            }
        }
    
        base.OnActivated(args);
    }
    
    
    

4. 장치 정보 표시 코드 추가

StorageDevice 클래스의 속성에서 카메라에 대한 정보를 가져올 수 있습니다. 이 단계의 코드는 앱이 실행될 때 장치 이름 및 기타 정보를 사용자에게 표시합니다. 그런 후 다음 단계에서 추가할 GetImageList 및 GetThumbnail 메서드를 호출하여 카메라에 저장된 이미지의 미리 보기를 표시합니다.

  • MainPage.xaml.cs 또는 MainPage.xaml.vb 파일에서 다음 코드를 MainPage 클래스에 추가합니다.
    
    private Windows.Storage.StorageFolder rootFolder;
    
    internal async void ShowImages(Windows.Storage.StorageFolder folder)
    {
        DeviceInfoTextBlock.Text = "Display Name = " + folder.DisplayName + "\n";
        DeviceInfoTextBlock.Text += "Display Type =  " + folder.DisplayType + "\n";
        DeviceInfoTextBlock.Text += "FolderRelativeId = " + folder.FolderRelativeId + "\n";
    
        // Reference first folder of the device as the root
        rootFolder = (await folder.GetFoldersAsync())[0];
        var imageList = await GetImageList(rootFolder);
    
        foreach (Windows.Storage.StorageFile img in imageList)
        {
            ImagesList.Items.Add(await GetThumbnail(img));
        }
    }
    
    
    

5. 이미지 표시 코드 추가

이 단계의 코드는 카메라에 저장된 이미지의 미리 보기를 표시합니다. 이 코드는 카메라를 비동기 호출하여 미리 보기 이미지를 가져옵니다. 그러나 다음 비동기 호출은 이전 비동기 호출이 완료된 다음에야 실행됩니다. 따라서 카메라에 대해 한 번에 하나만 요청해야 합니다.

  • MainPage.xaml.cs 또는 MainPage.xaml.vb 파일에서 다음 코드를 MainPage 클래스에 추가합니다.
    
    async private System.Threading.Tasks.Task<List<Windows.Storage.StorageFile>> GetImageList(Windows.Storage.StorageFolder folder) 
    {
        var result = await folder.GetFilesAsync();
        var subFolders = await folder.GetFoldersAsync();
        foreach (Windows.Storage.StorageFolder f in subFolders)
            result = result.Union(await GetImageList(f)).ToList();
    
        return (from f in result orderby f.Name select f).ToList();
    }
    
    async private System.Threading.Tasks.Task<Image> GetThumbnail(Windows.Storage.StorageFile img) 
    {
        // Get the thumbnail to display
        var thumbnail = await img.GetThumbnailAsync(Windows.Storage.FileProperties.ThumbnailMode.SingleItem,
                                                    100,
                                                    Windows.Storage.FileProperties.ThumbnailOptions.UseCurrentScale);
    
        // Create a XAML Image object bind to on the display page
        var result = new Image();
        result.Height = thumbnail.OriginalHeight;
        result.Width = thumbnail.OriginalWidth;
        result.Name = img.Name;
        var imageBitmap = new Windows.UI.Xaml.Media.Imaging.BitmapImage();
        imageBitmap.SetSource(thumbnail);
        result.Source = imageBitmap;
    
        return result;
    }
    
    
    

6. 앱 빌드 및 실행

  1. F5를 눌러 앱을 빌드하고 배포합니다(디버그 모드).
  2. 앱을 실행하려면 컴퓨터에 카메라를 연결합니다. 그런 다음 옵션의 자동 실행 목록에서 앱을 선택합니다.

    참고  일부 카메라에서는 WPD\ImageSource 자동 실행 장치 이벤트에 대해 알리지 않습니다.

요약

이 자습서에서는 카메라 장치에서 이미지 파일을 표시하는 앱을 만들었습니다. 그리고 자동 실행 WPD\ImageSource 장치 이벤트에 대해 앱을 등록했습니다.

관련 항목

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

 

 

표시:
© 2014 Microsoft