Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Aplikacja może używać sieci bezprzewodowej, połączenia Bluetooth i połączenia w chmurze, aby odnaleźć urządzenia z systemem Windows, które są zalogowane przy użyciu tego samego konta Microsoft, co urządzenie odnajdujące. Urządzenia zdalne nie muszą mieć zainstalowanego specjalnego oprogramowania, aby można je było odnaleźć.
Uwaga / Notatka
W tym przewodniku założono, że masz już udzielony dostęp do funkcji Systemy zdalne, wykonując kroki opisane w temacie Uruchamianie aplikacji zdalnej.
Filtrowanie zestawu odnajdwalnych urządzeń
Zestaw odnajdwalnych urządzeń można zawęzić przy użyciu elementu RemoteSystemWatcher z filtrami. Filtry mogą wykrywać typ odnajdywania (bliskie, sieć lokalna lub połączenie z chmurą), typ urządzenia (komputer, urządzenie przenośne, konsola Xbox, Hub i urządzenie holograficzne) oraz stan dostępności (stan, w jakim urządzenie jest dostępne do korzystania z funkcji systemu zdalnego).
Obiekty filtru należy skonstruować przed zainicjowaniem obiektu RemoteSystemWatcher lub podczas jego inicjowania, ponieważ są przekazywane jako parametr do konstruktora. Poniższy kod tworzy filtr każdego dostępnego typu, a następnie dodaje go do listy.
Uwaga / Notatka
Kod w tych przykładach wymaga deklaracji using Windows.System.RemoteSystems w pliku.
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;
}
Uwaga / Notatka
Wartość filtra "proximal" nie gwarantuje stopnia fizycznej bliskości. W przypadku scenariuszy wymagających niezawodnej odległości fizycznej użyj wartości RemoteSystemDiscoveryType.SpatiallyProximal w filtrze. Obecnie ten filtr zezwala tylko na urządzenia, które są odnajdywane przez funkcję Bluetooth. W miarę jak obsługiwane są nowe mechanizmy odnajdywania i protokoły gwarantujące bliskość fizyczną, będą one tutaj również uwzględniane.
Istnieje również właściwość w klasie RemoteSystem , która wskazuje, czy odnalezione urządzenie znajduje się w rzeczywistości w fizycznej odległości: RemoteSystem.IsAvailableBySpatialProximity.
Uwaga / Notatka
Jeśli zamierzasz odnajdywać urządzenia w sieci lokalnej (określone przez wybór filtru typu odnajdywania), Twoja sieć musi korzystać z profilu "prywatnego" lub "domenowego". Urządzenie nie odnajduje innych urządzeń za pośrednictwem sieci "publicznej".
Po utworzeniu listy obiektów IRemoteSystemFilter, można ją przekazać do konstruktora RemoteSystemWatcher.
// store filter list
List<IRemoteSystemFilter> listOfFilters = makeFilterList();
// construct watcher with the list
m_remoteSystemWatcher = RemoteSystem.CreateWatcher(listOfFilters);
Po wywołaniu metody Start tego obserwatora, zostanie wywołane zdarzenie RemoteSystemAdded tylko wtedy, gdy wykryte zostanie urządzenie, które spełnia wszystkie następujące kryteria:
- Można go odnaleźć za pomocą połączenia proximalnego
- Jest to komputer stacjonarny lub telefon
- Jest klasyfikowana jako dostępna
W tym miejscu procedura obsługi zdarzeń, pobierania obiektów RemoteSystem i nawiązywania połączenia z urządzeniami zdalnymi jest dokładnie taka sama jak w temacie Uruchamianie aplikacji zdalnej. Krótko mówiąc, obiekty RemoteSystem są przechowywane jako właściwości obiektów RemoteSystemAddedEventArgs, które są przekazywane z każdym zdarzeniem RemoteSystemAdded.
Odkrywanie urządzeń poprzez wprowadzenie adresu
Niektóre urządzenia mogą nie być skojarzone z użytkownikiem ani nie dawać się wykryć przez skanowanie, ale nadal można się z nimi połączyć, jeśli aplikacja odnajdująca używa bezpośredniego adresu. Klasa HostName służy do reprezentowania adresu urządzenia zdalnego. Jest to często przechowywane w postaci adresu IP, ale kilka innych formatów jest dozwolonych (zobacz konstruktor HostName , aby uzyskać szczegółowe informacje).
Obiekt RemoteSystem jest pobierany, jeśli podano prawidłowy obiekt HostName . Jeśli dane adresu są nieprawidłowe, null zwracane jest odwołanie do obiektu.
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;
}
Wykonywanie zapytań dotyczących możliwości w systemie zdalnym
Chociaż oddzielone od filtrowania w procesie odkrywania, zapytania dotyczące możliwości urządzeń mogą być ważną częścią procesu odkrywania. Korzystając z metody RemoteSystem.GetCapabilitySupportedAsync , można wykonywać zapytania dotyczące odnalezionych systemów zdalnych w celu obsługi niektórych funkcji, takich jak łączność sesji zdalnej lub udostępnianie jednostki przestrzennej (holograficznej). Zobacz KnownRemoteSystemCapabilities, aby zapoznać się z listą możliwości do wykonywania zapytań.
// Check to see if the given remote system can accept LaunchUri requests
bool isRemoteSystemLaunchUriCapable = remoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);
Wzajemne odkrywanie użytkowników
Deweloperzy mogą określić odnajdywanie wszystkich urządzeń znajdujących się w pobliżu urządzenia klienckiego, a nie tylko urządzeń zarejestrowanych dla tego samego użytkownika. Implementuje się to za pomocą specjalnego IRemoteSystemFilter, RemoteSystemAuthorizationKindFilter. Jest on implementowany jak inne typy filtrów:
// Construct a user type filter that includes anonymous devices
RemoteSystemAuthorizationKindFilter authorizationKindFilter = new RemoteSystemAuthorizationKindFilter(RemoteSystemAuthorizationKind.Anonymous);
// then add this filter to the RemoteSystemWatcher
- Wartość RemoteSystemAuthorizationKindAnonymous umożliwi odnajdywanie wszystkich bliskich urządzeń, nawet tych od niezaufanych użytkowników.
- Wartość SameUser ogranicza wyszukiwanie tylko do urządzeń zarejestrowanych na tego samego użytkownika, co urządzenie klienta. Jest to zachowanie domyślne.
Sprawdzanie ustawień udostępniania między użytkownikami
Oprócz powyższego filtru określonego w aplikacji odnajdywania urządzenie klienckie musi być również skonfigurowane tak, aby zezwalało na udostępnianie środowisk z urządzeń zalogowanych innym użytkownikom. Jest to ustawienie systemowe, które można zapytać, używając metody statycznej w klasie 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".
}
Aby zmienić to ustawienie, użytkownik musi otworzyć pozycję Ustawienia. W menu systemu
strona ustawień wspólnych doświadczeń 
Tematy pokrewne
- połączone aplikacje i urządzenia (Project Rome)
- Uruchamianie aplikacji zdalnej
- Referencja API systemów zdalnych
- Systemy Zdalne: Przykład