Сопряжение устройств

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

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

Иногда вы хотите использовать устройство в приложении, но не заботитесь о том, является ли устройство парным. Вы просто хотите использовать функциональные возможности, связанные с устройством. Например, если вашему приложению нужно просто получить изображение с веб-камеры, вас не обязательно интересует само устройство, а только получение изображения. Если для интересующего вас устройства доступны 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, поддерживается новый DevicePairingKinds, ProvidePasswordCredential. Это значение означает, что приложение должно запрашивать имя пользователя и пароль от пользователя, чтобы пройти проверку подлинности с помощью парного устройства. Чтобы обработать этот случай, вызовите метод AcceptWithPasswordCredential аргументов события в обработчике события PairingRequested, чтобы принять сопряжение. Передайте объект PasswordCredential , инкапсулирующий имя пользователя и пароль в качестве параметра. Обратите внимание, что имя пользователя и пароль для удаленного устройства отличаются от учетных данных локально вошедшего пользователя.

Отмена сопряжения

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

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

Sample

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