Entdecken von Remotegeräten

Ihre App kann die Drahtlose Netzwerk-, Bluetooth- und Cloudverbindung verwenden, um Windows-Geräte zu ermitteln, die mit demselben Microsoft-Konto wie das ermittelnde Gerät angemeldet sind. Die Remotegeräte müssen keine spezielle Software installiert haben, um auffindbar zu sein.

Hinweis

In diesem Handbuch wird davon ausgegangen, dass Ihnen bereits Der Zugriff auf das Remotesystemfeature gewährt wurde, indem Sie die Schritte unter Starten einer Remote-App ausführen.

Filtern der Gruppe von auffindbaren Geräten

Sie können den Satz auffindbarer Geräte mithilfe eines RemoteSystemWatcher-Steuerelements mit Filtern einschränken. Filter können den Ermittlungstyp (proximales vs. lokales Netzwerk und Cloudverbindung), Gerätetyp (Desktop, mobiles Gerät, Xbox, Hub und Holographic) und Verfügbarkeitsstatus (der 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 jedes verfügbaren Typs und fügt sie dann 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 Filterwert "proximal" garantiert nicht den Grad der physischen Nähe. Verwenden Sie für Szenarien, die eine zuverlässige physische Näherung 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, die die physische Nähe garantieren, unterstützt werden, werden sie auch hier aufgenommen.
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 Geräte über ein lokales Netzwerk ermitteln möchten (bestimmt durch die Auswahl des Suchtypfilters), muss Ihr Netzwerk ein "privates" oder "Domänenprofil" verwenden. Ihr Gerät erkennt keine anderen Geräte über ein "öffentliches" Netzwerk.

Sobald eine Liste von 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 Startmethode dieser Überwachung aufgerufen wird, löst sie das RemoteSystemAdded-Ereignis nur aus, wenn ein Gerät erkannt wird, das alle folgenden Kriterien erfüllt:

  • Es ist durch proximale Verbindung auffindbar
  • Es handelt sich um einen Desktop oder ein Telefon
  • Sie wird als verfügbar klassifiziert.

Von dort aus ist das Verfahren zum Behandeln von Ereignissen, abrufen von RemoteSystem-Objekten und das Herstellen einer Verbindung mit Remotegeräten identisch mit dem starten einer Remote-App. Kurz gesagt werden die RemoteSystem-Objekte als Eigenschaften von RemoteSystemAddedEventArgs-Objekten gespeichert, die mit jedem RemoteSystemAdded-Ereignis übergeben werden.

Ermitteln von Geräten nach Adresseingabe

Einige Geräte sind möglicherweise nicht einem Benutzer zugeordnet oder mit einem Scan auffindbar, können aber dennoch 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, aber mehrere andere Formate sind zulässig (einzelheiten hierzu finden Sie im 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

Unabhängig von der Ermittlungsfilterung kann das Abfragen von Gerätefunktionen ein wichtiger Bestandteil des Ermittlungsprozesses sein. Mithilfe der RemoteSystem.GetCapabilitySupportedAsync-Methode können Sie ermittelte Remotesysteme abfragen, um bestimmte Funktionen wie Remotesitzungskonnektivität oder räumliche Entitätsfreigabe (holographische) Unterstützung zu erhalten. Die KnownRemoteSystemCapabilities-Klasse finden Sie in der Liste der abfragefähigen Funktionen.

// 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 geräte, die für denselben Benutzer registriert sind. Dies wird über einen speziellen IRemoteSystemFilter, RemoteSystemAuthorizationKindFilter, implementiert. Sie 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
  • Ein Wert "RemoteSystemAuthorizationKind" von "Anonymous" ermöglicht die Ermittlung aller proximalen Geräte, auch von nicht vertrauenswürdigen Benutzern.
  • Ein Wert von SameUser filtert die Ermittlung nur auf Geräte, die für denselben Benutzer registriert sind wie das Clientgerät. Dies ist die Standardeinstellung.

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

Zusätzlich zum oben genannten Filter, der in Ihrer Ermittlungs-App angegeben wird, muss das Clientgerät selbst konfiguriert werden, um freigegebene Erfahrungen von Geräten zuzulassen, 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 Einstellungs-App öffnen. Im Menü "Gemeinsame Gerätefreigabe>" gibt es ein Dropdownfeld, in dem der Benutzer angeben kann, für welche Geräte sein System freigegeben werden kann.>

Seite