Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Это важно
Метаданные устройства являются устаревшими и будут удалены в будущем выпуске Windows. Сведения о замене этой функции см. в разделе Метаданные контейнера пакетов драйверов.
Приложение UWP может синхронизировать данные на периферийном устройстве. Если приложение связано с метаданными устройства, это приложение устройства UWP также может выполнять обновления устройств, например обновления встроенного ПО. В этой статье описывается, как создать фоновую задачу устройства, которая использует DeviceUseTrigger или DeviceServicingTrigger. Фоновые агенты устройства, которые используют эти триггеры, подчиняются политике, обеспечивающей получение согласия пользователя и помогающей продлить срок службы батареи в процессе синхронизации и обновления устройств. Дополнительные сведения о фоновых задачах устройства см. в разделе "Синхронизация устройств и обновление" для приложений устройств UWP.
Эта статья соответствует примеру пользовательского USB-устройства. В примере пользовательского USB-устройства показана фоновая задача, которая выполняет синхронизацию устройства с DeviceUseTrigger.
Хотя фоновая задача устройства в примере пользовательского USB-устройства включает DeviceUseTrigger, все, что описано в этой статье, также можно применить к фоновым задачам устройства, используюющим DeviceServicingTrigger. Единственное различие между использованием двух триггеров — это проверки политики, сделанные Windows.
Манифест приложения
Чтобы использовать фоновую задачу устройства, приложение должно объявить его в файле манифеста приложения переднего плана, как и для фоновых задач, активированных системой. Дополнительные сведения см. в разделе "Синхронизация устройств и обновление" для приложений устройств UWP.
В этом примере из файла манифеста пакета приложения DeviceLibrary.SyncContent является точкой входа для приложения переднего плана. DeviceLibrary.SyncContent — это точка входа для фоновой задачи, которая использует DeviceUseTrigger.
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
<BackgroundTasks>
<m2:Task Type="deviceUse" />
</BackgroundTasks>
</Extension>
</Extensions>
Фоновая задача устройства
Класс фоновой задачи устройства реализует интерфейс IBackgroundTask и содержит код, который вы создаете для синхронизации или обновления периферийного устройства. Класс фоновой задачи выполняется при активации фоновой задачи и из точки входа, предоставленной в манифесте приложения.
Фоновый класс устройства в примере пользовательского USB-устройства содержит код для синхронизации с USB-устройством с помощью фоновой задачи DeviceUseTrigger . Для получения полных сведений скачайте пример. Дополнительные сведения о реализации IBackgroundTask и фоновой инфраструктуре задач Windows см. в статье "Поддержка приложения с фоновыми задачами".
Ключевые части фоновой задачи устройства в примере пользовательского USB-устройства :
Класс
IoSyncBackgroundTaskреализует интерфейс, необходимый для инфраструктуры фоновых задач Windows.Класс
IoSyncBackgroundTaskполучает экземплярDeviceUseDetails, переданный этому классу методом Run классаIoSyncBackgroundTask, и использует этот экземпляр для отправки отчета о ходе выполнения в приложение Microsoft Store и регистрации на события отмены.Метод
IoSyncBackgroundTaskRun класса также вызывает частныеOpenDeviceиWriteToDeviceAsyncметоды, реализующие код синхронизации фоновых устройств.
Приложение переднего плана
Приложение переднего плана в примере пользовательского USB-устройства регистрирует и активирует фоновую задачу устройства, использующую DeviceUseTrigger. В этом разделе представлен обзор шагов, которые будет предпринять приложение переднего плана для регистрации, активации и обработки хода выполнения фоновой задачи устройства.
Приложение переднего плана в примере пользовательского USB-устройства выполняет следующие действия, чтобы использовать фоновую задачу устройства:
Создает новые объекты DeviceUseTrigger и
BackgroundTaskRegistration.Проверяет, были ли фоновые задачи ранее зарегистрированы этим приложением и отменяют их, вызвав метод BackgroundTaskRegistration.Unregister для задачи.
SetupBackgroundTaskЧастный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством. МетодSetupBackgroundTaskвызывается изSyncWithDeviceAsyncметода на следующем шаге.Инициализирует
DeviceUseTriggerи сохраняет его для последующего использования.Создает новый объект
BackgroundTaskBuilderи использует его свойства и методName,TaskEntryPointиSetTriggerдля регистрации объектаDeviceUseTrigger, принадлежащего приложению, и имени фоновой задачи. СвойствоBackgroundTaskBuilderобъектаTaskEntryPointимеет полное имя фонового класса задач, который будет выполняться при активации фоновой задачи.Регистрирует события завершения и прогресса фоновой задачи, чтобы приложение переднего плана могло предоставлять пользователю информацию о завершении и ходе выполнения.
SyncWithDeviceAsyncЧастный метод регистрирует фоновую задачу, которая будет синхронизироваться с устройством и запускает фоновую синхронизацию.SetupBackgroundTaskВызывает метод из предыдущего шага и регистрирует фоновую задачу, которая будет синхронизироваться с устройством.Вызывает закрытый
StartSyncBackgroundTaskAsyncметод, который запускает фоновую задачу. Метод закрывает дескриптор доступа приложения к устройству, обеспечивая возможность фоновой задаче открыть устройство при запуске.Это важно
Фоновая задача должна открыть устройство для обновления, поэтому приложение переднего плана должно закрыть свои подключения к устройству перед вызовом
RequestAsync.
Затем метод
StartSyncBackgroundTaskAsyncвызывает методDeviceUseTriggerобъектаRequestAsync, который запускает фоновую задачу и возвращает объектDeviceTriggerResultsизRequestAsync, используемый для определения успешного запуска фоновой задачи.Это важно
Windows проверяет, что все необходимые проверки политики запуска задач завершены. Если все проверки политики завершены, операция обновления теперь выполняется как фоновая задача за пределами приложения переднего плана, что позволяет приложению безопасно приостановиться во время выполнения операции. Windows также будет применять любые требования среды выполнения и отменять фоновую задачу, если эти требования больше не выполнены.
Наконец, метод
SyncWithDeviceAsyncиспользует объектDeviceTriggerResults, возвращенный изStartSyncBackgroundTaskAsync, чтобы определить, успешно ли запущена фоновая задача. Оператор switch используется для оценки результата изDeviceTriggerResultsПриложение, работающее на переднем плане, реализует приватный
OnSyncWithDeviceProgressобработчик событий, который обновляет пользовательский интерфейс приложения с информацией о прогрессе фоновой задачи устройства.Приложение переднего плана реализует частный
OnSyncWithDeviceCompletedобработчик событий для обработки перехода от фоновых задач к приложению переднего плана при завершении фоновой задачи.Метод
CheckResultsобъектаBackgroundTaskCompletedEventArgsиспользуется, чтобы определить, были ли выброшены какие-либо исключения в ходе выполнения фоновой задачи.Приложение переднего плана повторно открывает устройство для использования приложением теперь, когда фоновая задача завершена и обновляет пользовательский интерфейс, чтобы уведомить пользователя.
Приложение переднего плана реализует обработчики событий нажатия приватной кнопки из пользовательского интерфейса, чтобы начать и отменить фоновую задачу.
Обработчик частных
Sync_Clickсобытий вызывает метод, описанныйSyncWithDeviceAsyncв предыдущих шагах.Обработчик частных
CancelSync_Clickсобытий вызывает частныйCancelSyncWithDeviceметод для отмены фоновой задачи.
Частный
CancelSyncWithDeviceметод отменяет регистрацию и отменяет все активные синхронизации устройств, чтобы устройство можно было повторно открыть с помощью метода BackgroundTaskRegistration.Unregister .