Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A sua aplicação pode usar a rede sem fios, o Bluetooth e a ligação à nuvem para descobrir dispositivos Windows que iniciaram sessão com a mesma conta Microsoft que o dispositivo que faz a descoberta. Os dispositivos remotos não precisam ter nenhum software especial instalado para serem detetáveis.
Observação
Este guia pressupõe que você já tenha recebido acesso ao recurso Sistemas Remotos seguindo as etapas em Iniciar um aplicativo remoto.
Filtrar o conjunto de dispositivos detetáveis
Você pode restringir o conjunto de dispositivos detetáveis usando um RemoteSystemWatcher com filtros. Os filtros podem detetar o tipo de descoberta (rede proximal vs. rede local vs. conexão na nuvem), o tipo de dispositivo (desktop, dispositivo móvel, Xbox, Hub e Holográfico) e o status de disponibilidade (o status da disponibilidade de um dispositivo para usar recursos do Sistema Remoto).
Os objetos de filtro devem ser construídos antes ou enquanto o objeto RemoteSystemWatcher é inicializado, porque eles são passados como um parâmetro para seu construtor. O código a seguir cria um filtro de cada tipo disponível e, em seguida, adiciona-os a uma lista.
Observação
O código nesses exemplos requer que você tenha uma instrução using Windows.System.RemoteSystems em seu arquivo.
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;
}
Observação
O valor do filtro "proximal" não garante o grau de proximidade física. Para cenários que exigem proximidade física confiável, use o valor RemoteSystemDiscoveryType.SpatiallyProximal no filtro. Atualmente, este filtro só permite dispositivos que são descobertos por Bluetooth. Como novos mecanismos de descoberta e protocolos que garantem a proximidade física são suportados, eles também serão incluídos aqui.
Há também uma propriedade na classe RemoteSystem que indica se um dispositivo descoberto está efetivamente dentro da proximidade física: RemoteSystem.IsAvailableBySpatialProximity.
Observação
Se pretender descobrir dispositivos na rede local (determinada pela seleção do filtro de tipo de descoberta), a rede precisa estar a usar um perfil "privado" ou "domínio". O seu dispositivo não irá descobrir outros dispositivos através de uma rede "pública".
Depois que uma lista de objetos IRemoteSystemFilter é criada, ela pode ser passada para o construtor de um RemoteSystemWatcher.
// store filter list
List<IRemoteSystemFilter> listOfFilters = makeFilterList();
// construct watcher with the list
m_remoteSystemWatcher = RemoteSystem.CreateWatcher(listOfFilters);
Quando o método Start deste observador é chamado, ele desencadeará o evento RemoteSystemAdded somente se for detetado um dispositivo que atenda a todos os seguintes critérios:
- É detetável por conexão proximal
- É um desktop ou telefone
- É classificado como disponível
A partir desse ponto, o procedimento para manipular eventos, recuperar objetos RemoteSystem e estabelecer ligação com dispositivos remotos é exatamente igual ao utilizado em Iniciar uma aplicação remota. Em resumo, os objetos
Descubra dispositivos por entrada de endereço
Alguns dispositivos podem não estar associados a um utilizador ou visíveis numa análise, mas ainda podem ser acessíveis se a aplicação de descoberta usar um endereço direto. A classe
Um objeto RemoteSystem é recuperado se for fornecido um objeto HostName válido. Se os dados de endereço forem inválidos, uma referência de objeto null será retornada.
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;
}
Consultando um recurso em um sistema remoto
Consultar os recursos do dispositivo, embora separado da filtragem de descoberta, pode ser uma parte importante do processo de descoberta. Usando o método
// Check to see if the given remote system can accept LaunchUri requests
bool isRemoteSystemLaunchUriCapable = remoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);
Descoberta entre usuários
Os desenvolvedores podem especificar a descoberta de todos os dispositivos próximos ao dispositivo cliente, não apenas dispositivos registados ao mesmo usuário. Isso é implementado através de um IRemoteSystemFilter especial, RemoteSystemAuthorizationKindFilter. Ele é implementado como os outros tipos de filtro:
// Construct a user type filter that includes anonymous devices
RemoteSystemAuthorizationKindFilter authorizationKindFilter = new RemoteSystemAuthorizationKindFilter(RemoteSystemAuthorizationKind.Anonymous);
// then add this filter to the RemoteSystemWatcher
- Um valor de Anonymous em RemoteSystemAuthorizationKind permitirá detetar todos os dispositivos proximais, mesmo aqueles de utilizadores não confiáveis.
- Um valor de SameUser filtra a descoberta apenas para dispositivos registados ao mesmo utilizador que o dispositivo cliente. Este é o comportamento padrão.
Verificando as configurações de compartilhamento entre usuários
Além do filtro acima ser especificado em seu aplicativo de descoberta, o próprio dispositivo cliente também deve ser configurado para permitir experiências compartilhadas de dispositivos conectados com outros usuários. Esta é uma configuração do sistema que pode ser consultada com um método estático na classe
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".
}
Para alterar essa configuração, o usuário deve abrir Configurações. No menu System>Shared experiences>Share across devices, há uma caixa suspensa onde o usuário pode especificar com quais dispositivos seu sistema pode compartilhar.