Entdecken von Remotegeräten

Ihre App kann das drahtlose Netzwerk, bluetooth und die Cloudverbindung verwenden, um Windows-Geräte zu ermitteln, die mit demselben Microsoft-Konto wie das ermittelnde Gerät angemeldet sind. Auf den Remotegeräten muss keine spezielle Software installiert sein, damit sie erkennbar sind.

Hinweis

In diesem Handbuch wird davon ausgegangen, dass Ihnen bereits Zugriff auf das Remotesysteme-Feature gewährt wurde, indem Sie die Schritte in Starten einer Remote-App befolgt haben.

Filtern der Gruppe von erkennbaren Geräten

Sie können den Satz der auffindbaren Geräte einschränken, indem Sie eine RemoteSystemWatcher-Instanz mit Filtern verwenden. Filter können den Ermittlungstyp (proximal im Vergleich zu lokalem Netzwerk im Vergleich zur Cloudverbindung), den Gerätetyp (Desktop, mobiles Gerät, Xbox, Hub und Holographic) und die Verfügbarkeit status (die status der Verfügbarkeit eines Geräts zur Verwendung von Remotesystemfeatures) erkennen.

Filterobjekte müssen vor oder während der Initialisierung des RemoteSystemWatcher-Objekts erstellt werden, da sie als Parameter an den Konstruktor übergeben werden. Der folgende Code erstellt einen Filter von jedem verfügbaren Typ und fügt sie anschließend einer Liste hinzu.

Hinweis

Der Code in diesen Beispielen erfordert, dass Sie über eine using Windows.System.RemoteSystems -Anweisung in Ihrer Datei verfügen.

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;
}

Hinweis

Der "proximale" Filterwert garantiert nicht den Grad der physischen Nähe. Verwenden Sie für Szenarien, die eine zuverlässige physische Nähe erfordern, den Wert RemoteSystemDiscoveryType.SpatiallyProximal in Ihrem Filter. Derzeit lässt dieser Filter nur Geräte zu, die von Bluetooth erkannt werden. Da neue Ermittlungsmechanismen und Protokolle unterstützt werden, die physische Nähe garantieren, werden sie hier ebenfalls einbezogen.
Es gibt auch eine Eigenschaft in der RemoteSystem-Klasse , die angibt, ob sich ein ermitteltes Gerät tatsächlich in physischer Nähe befindet: RemoteSystem.IsAvailableBySpatialProximity.

Hinweis

Wenn Sie beabsichtigen, Geräte über ein lokales Netzwerk zu ermitteln (bestimmt durch Ihre Filterauswahl für den Ermittlungstyp), muss Ihr Netzwerk ein "privates" oder "Domänenprofil" verwenden. Ihr Gerät erkennt keine anderen Geräte über ein "öffentliches" Netzwerk.

Sobald eine Liste mit IRemoteSystemFilter-Objekten erstellt wurde, kann sie an den Konstruktor eines RemoteSystemWatcherübergeben werden.

// store filter list
List<IRemoteSystemFilter> listOfFilters = makeFilterList();

// construct watcher with the list
m_remoteSystemWatcher = RemoteSystem.CreateWatcher(listOfFilters);

Wenn die Start-Methode dieses Überwachungselements aufgerufen wird, wird das RemoteSystemAdded-Ereignis nur dann ausgelöst, wenn ein Gerät erkannt wird, das alle der folgenden Kriterien erfüllt:

  • Es kann von einer proximalen Verbindung erkannt werden
  • Es ist ein Desktop oder ein Telefon
  • Es wird als verfügbar klassifiziert

Ab diesem Punkt ist die Vorgehensweise zum Behandeln von Ereignissen, Abrufen von RemoteSystem-Objekten und Herstellen einer Verbindung mit Remotegeräten die gleiche wie in Starten einer Remote-App. Kurz gesagt, die RemoteSystem-Objekte werden als Eigenschaften von RemoteSystemAddedEventArgs-Objekten gespeichert, die mit jedem RemoteSystemAdded-Ereignis übergeben werden.

Ermitteln von Geräten durch Adresseingabe

Einige Geräte sind möglicherweise nicht mit einem Benutzer verknüpft oder durch eine Überprüfung erkennbar. Sie können jedoch trotzdem erreicht werden, wenn die ermittelnde App eine direkte Adresse verwendet. Die HostName-Klasse wird verwendet, um die Adresse eines Remotegeräts darzustellen. Dies wird häufig in Form einer IP-Adresse gespeichert, jedoch sind auch verschiedene andere Formate zulässig (weitere Informationen finden Sie unter HostName-Konstruktor.

Ein RemoteSystem-Objekt wird abgerufen, wenn ein gültiges HostName-Objekt bereitgestellt wird. Wenn die Adressdaten ungültig sind, wird ein null-Objektverweis zurückgegeben.

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;
}

Abfragen einer Funktion auf einem Remotesystem

Obwohl sie von der Ermittlungsfilterung getrennt sind, kann das Abfragen von Gerätefunktionen ein wichtiger Bestandteil des Ermittlungsprozesses sein. Mit der RemoteSystem.GetCapabilitySupportedAsync-Methode können Sie ermittelte Remotesysteme zur Unterstützung bestimmter Funktionen abfragen, z. B. Remotesitzungskonnektivität oder räumliche Entitätsfreigabe (holografische Freigabe). Eine Liste der abfragbaren Funktionen finden Sie in der KnownRemoteSystemCapabilities-Klasse .

// Check to see if the given remote system can accept LaunchUri requests
bool isRemoteSystemLaunchUriCapable = remoteSystem.GetCapabilitySupportedAsync(KnownRemoteSystemCapabilities.LaunchUri);

Benutzerübergreifende Ermittlung

Entwickler können die Ermittlung aller Geräte in der Nähe des Clientgeräts angeben, nicht nur der Geräte, die für denselben Benutzer registriert sind. Dies wird durch einen speziellen IRemoteSystemFilter, RemoteSystemAuthorizationKindFilter, implementiert. Es wird wie die anderen Filtertypen implementiert:

// Construct a user type filter that includes anonymous devices
RemoteSystemAuthorizationKindFilter authorizationKindFilter = new RemoteSystemAuthorizationKindFilter(RemoteSystemAuthorizationKind.Anonymous);
// then add this filter to the RemoteSystemWatcher
  • Der Wert "RemoteSystemAuthorizationKind" von Anonymous ermöglicht die Ermittlung aller proximalen Geräte, auch von nicht vertrauenswürdigen Benutzern.
  • Der Wert SameUser filtert die Ermittlung nur auf Geräte, die bei demselben Benutzer wie das Clientgerät registriert sind. Dies ist das Standardverhalten.

Überprüfen der Einstellungen für die benutzerübergreifende Freigabe

Zusätzlich zum oben genannten Filter, der in Ihrer Ermittlungs-App angegeben wird, muss auch das Clientgerät selbst so konfiguriert werden, dass gemeinsame Erfahrungen von Geräten zugelassen werden, die mit anderen Benutzern angemeldet sind. Dies ist eine Systemeinstellung, die mit einer statischen Methode in der RemoteSystem-Klasse abgefragt werden kann:

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".
}

Um diese Einstellung zu ändern, muss der Benutzer die App Einstellungen öffnen. Im Menü GemeinsameSystemerfahrungen>>geräteübergreifend freigeben gibt es ein Dropdownfeld, in dem der Benutzer angeben kann, mit welchen Geräten sein System freigegeben werden kann.

Einstellungsseite für freigegebene Erfahrungen