Обнаружение удаленных устройств
Ваше приложение может использовать беспроводную сеть, Bluetooth и облачное подключение для обнаружения устройств с Windows, вход с которых выполнен с той же учетной записью Майкрософт, что и у обнаруживающего устройства. Обнаружение удаленных устройств возможно без установки на них какого-либо специального программного обеспечения.
Примечание
В этом руководстве предполагается, что вы уже получили доступ к функции удаленных систем, выполнив шаги раздела Запуск удаленного приложения.
Фильтрация набора устройств, доступных для обнаружения
Набор доступных для обнаружения устройств можно ограничить, используя RemoteSystemWatcher с фильтрами. Фильтры могут определять тип обнаружения (подключение близкого радиуса действия или локальная сеть или облачное подключение), типа устройства (компьютер, мобильное устройство, Xbox, Hub и Holographic) и состояние доступности (состояние доступности устройства для использования функций удаленной системы).
Объекты фильтра должны быть созданы до или во время инициализации объекта RemoteSystemWatcher, поскольку они передаются как параметры в его конструктор. Следующий код создает фильтры каждого доступного типа, затем добавляет их в список.
Примечание
В коде из этих примеров требуется, чтобы в вашем файле имелся оператор using Windows.System.RemoteSystems
.
private List<IRemoteSystemFilter> makeFilterList()
{
// construct an empty list
List<IRemoteSystemFilter> localListOfFilters = new List<IRemoteSystemFilter>();
// construct a discovery type filter that only allows "proximal" connections:
RemoteSystemDiscoveryTypeFilter discoveryFilter = new RemoteSystemDiscoveryTypeFilter(RemoteSystemDiscoveryType.Proximal);
// construct a device type filter that only allows desktop and mobile devices:
// For this kind of filter, we must first create an IIterable of strings representing the device types to allow.
// These strings are stored as static read-only properties of the RemoteSystemKinds class.
List<String> listOfTypes = new List<String>();
listOfTypes.Add(RemoteSystemKinds.Desktop);
listOfTypes.Add(RemoteSystemKinds.Phone);
// Put the list of device types into the constructor of the filter
RemoteSystemKindFilter kindFilter = new RemoteSystemKindFilter(listOfTypes);
// construct an availibility status filter that only allows devices marked as available:
RemoteSystemStatusTypeFilter statusFilter = new RemoteSystemStatusTypeFilter(RemoteSystemStatusType.Available);
// add the 3 filters to the listL
localListOfFilters.Add(discoveryFilter);
localListOfFilters.Add(kindFilter);
localListOfFilters.Add(statusFilter);
// return the list
return localListOfFilters;
}
Примечание
Значение фильтра "proximal" не гарантирует степень физической близости. Для сценариев, которым требуется надежная физическая близость, используйте значение RemoteSystemDiscoveryType.SpatiallyProximal в своем фильтре. В настоящее время этот фильтр допускает только устройства, которые обнаружены с помощью Bluetooth. Так как новые механизмы обнаружения и протоколы, которые гарантируют физическую близость, поддерживаются, они также будут включены здесь.
Также существует свойство в классе RemoteSystem, которое указывает, находится ли обнаруженное устройство на самом деле в пределах физической близости: RemoteSystem.IsAvailableBySpatialProximity.
Примечание
Если требуется обнаруживать устройства по локальной сети (определяется фильтром выбора типа обнаружения), в вашей сети необходимо использовать профиль «частная» или «доменная». Устройство не будет обнаруживать другие устройства в «общедоступной» сети.
После создания списка объектов IRemoteSystemFilter его можно передать в конструктор объекта RemoteSystemWatcher.
// store filter list
List<IRemoteSystemFilter> listOfFilters = makeFilterList();
// construct watcher with the list
m_remoteSystemWatcher = RemoteSystem.CreateWatcher(listOfFilters);
При вызове метода Start этого наблюдателя он инициирует событие RemoteSystemAdded только в случае обнаружения устройства, которое соответствует всем указанным ниже критериям.
- Оно может быть обнаружено с помощью подключения близкого радиуса действия
- Это компьютер или телефон
- Оно классифицируется как доступное
С этого момента процедура обработки событий, извлечения объектов RemoteSystem и подключения к удаленным устройствам полностью совпадает с процедурой из раздела Запуск удаленного приложения. Если коротко, объекты RemoteSystem хранятся в виде свойств объектов RemoteSystemAddedEventArgs, которые передаются с каждым событием RemoteSystemAdded.
Обнаружение устройств путем ввода адреса
Некоторые устройства могут быть не связаны с пользователем или могут не обнаруживаться сканированием, но с ними все равно можно установить связь, если обнаруживающее приложение использует прямой адрес. Класс HostName используется для представления адреса удаленного устройства. Он часто хранится в виде IP-адреса, но допускается также ряд других форматов (см. раздел Конструктор HostName).
Объект RemoteSystem извлекается, если указан действительный объект HostName. Если сведения об адресе неправильные, возвращается ссылка на объект null
.
private async Task<RemoteSystem> getDeviceByAddressAsync(string IPaddress)
{
// construct a HostName object
Windows.Networking.HostName deviceHost = new Windows.Networking.HostName(IPaddress);
// create a RemoteSystem object with the HostName
RemoteSystem remotesys = await RemoteSystem.FindByHostNameAsync(deviceHost);
return remotesys;
}
Запрос возможности на удаленной системе
Несмотря на то что возможности запрашивания устройств отделены от фильтрации обнаружения, они могут быть важной частью процесса обнаружения. С помощью метода RemoteSystem.GetCapabilitySupportedAsync вы можете запрашивать обнаруженные удаленные системы для поддержки некоторых возможностей, например, подключения удаленного сеанса или совместного использования пространственных (голографических) объектов. Список запрашиваемых возможностей см. в классе KnownRemoteSystemCapabilities.
// Check to see if the given remote system can accept LaunchUri requests
bool isRemoteSystemLaunchUriCapable = remoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);
Обнаружение между пользователями
Разработчики могут указать обнаружение всех устройств по близости к клиентскому устройству, а не только к устройствам, зарегистрированным на одного и того же пользователя. Это реализуется через специальный IRemoteSystemFilter, RemoteSystemAuthorizationKindFilter. Это реализуется как и другие типы фильтра:
// Construct a user type filter that includes anonymous devices
RemoteSystemAuthorizationKindFilter authorizationKindFilter = new RemoteSystemAuthorizationKindFilter(RemoteSystemAuthorizationKind.Anonymous);
// then add this filter to the RemoteSystemWatcher
- Значение RemoteSystemAuthorizationKind параметра Anonymous будет разрешать обнаружение всех ближайших устройств, даже устройств от ненадежных пользователей.
- Значение SameUser фильтрует обнаружение только до устройств, зарегистрированных на одного и того же пользователя как клиентского устройства. Это поведение по умолчанию.
Проверка параметров общего доступа между пользователями
Кроме указанного выше фильтра, который указывается в приложении обнаружения, само клиентское устройство необходимо настроить на разрешение совместного использования с устройств, зарегистрированных с другими пользователями. Это параметр системы, который можно запросить с помощью статического метода в классе RemoteSystem:
if (!RemoteSystem.IsAuthorizationKindEnabled(RemoteSystemAuthorizationKind.Anonymous)) {
// The system is not authorized to connect to cross-user devices.
// Inform the user that they can discover more devices if they
// update the setting to "Anonymous".
}
Чтобы изменить этот параметр, пользователь должен открыть приложение Параметры. В менюОбщий> доступ к системным> интерфейсам наустройствах есть раскрывающийся список, в котором пользователь может указать устройства, которыми может делиться его система.
Связанные темы
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по