Информация
Запрошенная вами тема показана ниже. Однако эта тема не включена в библиотеку.

Краткое руководство: регистрация приложения для устройства автозапуска (XAML)

Applies to Windows only

Вы можете зарегистрировать приложения в качестве вариантов для событий автозапуска устройства. События автозапуска устройства возникают при подключении устройства к компьютеру.

Схема: каким образом эта тема связана с другими? См:

В этом разделе показано, как определить приложение в качестве варианта автозапуска при подключении камеры к компьютеру. Приложение регистрируется в качестве обработчика для события автозапускаWPD\ImageSource. Это распространенное событие, которое вызывается системой Windows Portable Device (WPD) при уведомлении камерами или другими устройствами обработки изображений о том, что они являются источниками изображений (ImageSource), использующими MTP. Подробнее см. в разделе о переносных устройствах Windows.

Если вы изготовитель устройства и хотите назначить приложение Магазина Windows для устройства в качестве обработчика автозапуска для вашего устройства, вы можете задать приложение в метаданных устройства. Если сопоставить приложение с идентификатором взаимодействия устройства как автоматически устанавливаемое приложение, операционная система будет обнаруживать это сопоставление при подключении устройства к компьютеру. Если приложение не установлено на компьютере, операционная система автоматически скачает и установит его. Автозапуск представит пользователю приложение как первый вариант обработчика для устройства. Подробнее см. в разделе об автозапуске приложений Магазина Windows для устройств.

Цель: Создайте приложение для обработки события автозапуска устройства.

Необходимые условия

Microsoft Visual Studio

Инструкции

1. Создание нового проекта и добавление объявления автозапуска

  1. Откройте Visual Studio и выберите пункт Создать проект в меню Файл. В разделе Visual C# или Visual Basic выберите Магазин Windows. Назовите приложение AutoPlayDevice_Camera и нажмите кнопку ОК.
  2. Откройте файл Package.appxmanifest и выберите вкладку Capabilities (Возможности). Выберите возможность Removable Storage (Съемные носители). Это дает приложению доступ к данным на камере как на томе съемного носителя.
  3. В файле манифеста выберите вкладку Declarations (Объявления). В раскрывающемся списке Available Declarations (Доступные объявления) выберите AutoPlay Device (Автозапуск устройства) и нажмите кнопку Add (Добавить). Выберите новый элемент AutoPlay Device (Автозапуск устройства), добавленный к списку Supported Declarations (Поддерживаемые объявления).
  4. Объявление Автозапуск устройства идентифицирует приложение как вариант, когда автозапуск генерирует событие устройства для известных событий.

    В разделе Launch Actions (Действия при запуске) введите указанные ниже значения для первого действия при запуске.

    ПараметрЗначение
    Verbпоказать
    Action Display NameShow Pictures
    Content EventWPD\ImageSource

     

    Параметр Action Display Name определяет строку, отображаемую автозапуском для приложения. Параметр Verb определяет значение, передаваемое приложению для выбранного варианта. Для события автозапуска можно указать несколько действий при запуске и использовать параметр Verb, чтобы определить, какой вариант пользователь выбрал для приложения. Выбранный пользователем вариант можно узнать, проверив свойство verb аргументов события запуска, переданных приложению. Для параметра Verb можно использовать любое значение, кроме значения open, которое зарезервировано. Пример использования нескольких команд в одном приложении см. в разделе Краткое руководство: регистрация приложения для автозапуска содержимого.

  5. В раскрывающемся списке Available Declarations (Доступные объявления) выберите File Type Associations (Сопоставление типов файлов) и щелкните Add (Добавить). В разделе Properties (Свойства) нового объявления File Type Associations (Сопоставление типов файлов) установите для поля Display Name (Отображаемое имя) значение Show Images from Camera, а для поля Name (Имя) — значение camera_association1. В разделе Supported File Types (Поддерживаемые типы файлов) щелкните Add New (Добавить). Для поля File Type (Тип файла) установите значение .jpg. В разделе Supported File Types (Поддерживаемые типы файлов) щелкните Add New (Добавить). Установите для поля File Type (Тип файла) нового сопоставления файлов значение .png. Для событий автозапуска содержимого средство автозапуска отфильтровывает любые типы файлов, которые явно не связаны с вашим приложением.
  6. Сохраните и закройте файл манифеста.

2. Добавление пользовательского интерфейса на XAML

  • Откройте файл 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. Добавление кода активации

Код на этом этапе ссылается на камеру как StorageDevice путем передачи идентификатора устройства методу FromId. Идентификатор устройства камеры получается путем отправки аргументов события как 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.

Связанные разделы

Запуск приложения с помощью автозапуска
Схема создания приложений среды выполнения Windows на C# или Visual Basic

 

 

Показ:
© 2014 Microsoft