Связывание устройств

В этом разделе описывается связывание устройств с помощью пространства имен Windows.Devices.Enumeration .

Важные API

Автоматическое связывание

Иногда вам необходимо использовать устройство в своем приложении, но вас не интересует, связано ли это устройство. Вы просто хотите иметь возможность использовать функцию, связанную с устройством. Например, если вашему приложению нужно просто сделать снимок веб-камерой, вы не обязательно заинтересованы в самом устройстве. Вас интересует только съемка. При наличии API устройства, доступных для интересующего вас устройства, этот сценарий относится к автоматическому связыванию.

В этом случае вы просто используете API, связанные с устройством, осуществляя вызовы по мере необходимости и доверяя системе обработку каждого связывания, которое может потребоваться. Некоторые устройства не нужно связывать, чтобы использовать их функции. Если устройство не требует связывания, API устройства незаметно обработают действие связывания. Следовательно, вам не нужно интегрировать эту функцию в свое приложение. Вашему приложению не будет известно о том, связано ли данное устройство или требуется ли это действие вообще, но вы сможете получать доступ к устройству и использовать его функции.

Базовое связывание

Базовое связывание происходит, когда ваше приложение использует API Windows.Devices.Enumeration, чтобы попытаться связать устройство. В этом сценарии вы предоставляете Windows контроль над процессом связывания и его обработкой. При необходимости взаимодействия с пользователем таковое будет обработано Windows. Вам можете использовать базовое связывание при необходимости связывания с устройством в отсутствие релевантного API устройства, который будет предпринимать попытку автоматического связывания. Вы просто хотите иметь возможность использовать устройство, а для этого необходимо выполнить связывание.

Чтобы попытаться выполнить базовое связывание, сначала необходимо получить объект DeviceInformation для устройства, которое вас интересует. Получив этот объект, вы сможете взаимодействовать со свойством DeviceInformation.Pairing, являющимся объектом DeviceInformationPairing. Чтобы выполнить связывание, просто вызовите DeviceInformationPairing.PairAsync. Вам необходимо будет подождать результат, чтобы предоставить приложению время попытаться завершить действие связывания. Будет возвращен результат действия связывания, и при отсутствии ошибок устройство будет связано.

В случае использования базового связывания вы также получаете доступ к дополнительной информации о состоянии связывания устройства. Например, вы знаете состояние связывания (IsPaired) и вам известно о возможности связывания устройства (CanPair). Эти показатели являются свойствами объекта DeviceInformationPairing. При использовании автоматического связывания у вас может не быть доступа к этим сведениям, если вы не получите релевантные объекты DeviceInformation.

Пользовательское связывание

Пользовательское связывание позволяет приложению участвовать в процессе связывания. Это позволяет вашему приложению указать DevicePairingKinds, поддерживаемые для процесса связывания. На вас также ляжет ответственность за создание собственного пользовательского интерфейса для взаимодействия с пользователем при необходимости. Используйте пользовательское связывание, если необходимо, чтобы приложение имело несколько больше влияния на ход процесса связывания, или для отображения собственного пользовательского интерфейса связывания.

Для реализации пользовательского связывания вам потребуется получить объект DeviceInformation для необходимого устройства, как и в случае с базовым связыванием. Однако конкретным свойством, в котором вы заинтересованы, является DeviceInformation.Pairing.Custom. Это даст вам объект DeviceInformationCustomPairing. Все методы DeviceInformationCustomPairing.PairAsync требуют включения параметра DevicePairingKinds. Это указывает на действия, которые пользователю необходимо предпринять, чтобы попытаться связать устройство. Дополнительные сведения о различных видах и необходимых действиях см. на справочной странице DevicePairingKinds. Как и в случае с базовым связыванием, вам необходимо будет подождать результат, чтобы предоставить приложению время попытаться выполнить действие связывания. Будет возвращен результат действия связывания, и при отсутствии ошибок устройство будет связано.

Для поддержки пользовательского связывания вам необходимо создать обработчик для события PairingRequested. Этот обработчик должен учитывать все различные значения DevicePairingKinds, которые могут использоваться в сценарии пользовательского связывания. Соответствующее действие будет зависеть от значения DevicePairingKinds, предоставляемого в числе аргументов события.

Важно помнить о том, что пользовательское связывание всегда является операцией на уровне системы. Из-за этого при работе на настольном компьютере или в Windows Phone перед началом связывания на экране всегда будет отображаться диалоговое окно системы. Это связано с тем, что для обеих этих платформ требуется согласие пользователя. Поскольку это диалоговое окно создается автоматически, вам не нужно будет создавать собственное диалоговое окно при выборе DevicePairingKindsConfirmOnly во время работы на этих платформах. Для другого DevicePairingKinds необходимо будет выполнить специальную обработку в зависимости от конкретного значения DevicePairingKinds. См. пример обработки пользовательского связывания для разных значений DevicePairingKinds.

Начиная с Windows 10 версии 1903 поддерживается новый DevicePairingKindsProvidePasswordCredential. Это значение означает, что приложение должно запросить у пользователя имя пользователя и пароль для проверки подлинности на связанном устройстве. Для обработки этого случая вызовите метод AcceptWithPasswordCredential аргументов события обработчика событий PairingRequested , чтобы принять связывание. Передайте объект PasswordCredential , который инкапсулирует имя пользователя и пароль в качестве параметра. Обратите внимание, что имя пользователя и пароль удаленного устройства отличаются от учетных данных пользователя, выполнившего локальный вход, и зачастую не совпадают с учетными данными пользователя, выполнившего локальный вход.

Отмена связывания

Отмена связывания уместна только в сценариях базового или пользовательского связывания, описанных выше. При использовании автоматического связывания нет необходимости в отмене связывания, так как приложение не учитывает состояние связывания устройства. Процесс отмены связывания устройства является одинаковым для базового и пользовательского связывания. Это обусловлено тем, что нет необходимости предоставлять дополнительные сведения или участвовать в отмене связывания.

Первым шагом при отмене связывания является получение объекта DeviceInformation для устройства, связывание которого необходимо отменить. Затем необходимо получить свойство DeviceInformation.Pairing и вызвать DeviceInformationPairing.UnpairAsync. Как и при связывании, нужно будет подождать результат. Будет возвращен результат действия отмены связывания, и при отсутствии ошибок связывание устройства будет отменено.

Образец

Рабочий пример см. в разделе Пример перечисления и связывания устройств на сайте GitHub.