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

В этом разделе описывается, как связать устройства с помощью пространства имен 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 системное диалоговое окно всегда будет отображаться пользователю при связывании. Это связано с тем, что обе эти платформы пользовались взаимодействием с пользователем, требующим согласия пользователя. Так как это диалоговое окно создается автоматически, вам не придется создавать собственный диалог при выборе устройства DevicePairingKinds из ConfirmOnly при работе на этих платформах. Для других DevicePairingKinds потребуется выполнить некоторую специальную обработку в зависимости от конкретного значения DevicePairingKinds . Примеры обработки пользовательских пар для различных значений DevicePairingKinds см. в примере.

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

Неоплачиваемая

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

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

Пример

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