Freigeben über


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 Zugriff auf die Remotesysteme-Funktion gewährt wurde, indem Sie die Schritte in Starten einer Remote-Appausführen.

Filtern der Gruppe von auffindbaren Geräten

Sie können mithilfe eines RemoteSystemWatchers mit Filtern den Satz auffindbarer Geräte einschränken. Filter können den Ermittlungstyp (Proximalnetzwerk vs. lokales Netzwerk vs. Cloudverbindung), Gerätetyp (Desktop, mobiles Gerät, Xbox, Hub und Holografisch) und Verfügbarkeitsstatus (der Status der Verfügbarkeit eines Geräts, um Remotesystemfunktionen zu verwenden) erkennen.

Filterobjekte müssen konstruiert werden, bevor das RemoteSystemWatcher--Objekt initialisiert wird, da sie als Parameter an dessen 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ähe erfordern, den Wert RemoteSystemDiscoveryType.SpatiallyProximal in Ihren Filtereinstellungen. 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 (wie durch Ihre Auswahl des Entdeckungstypfilters festgelegt), muss Ihr Netzwerk ein "privates" oder "Domain-Profil" verwenden. Ihr Gerät wird keine anderen Geräte in einem "öffentlichen" Netzwerk finden.

Sobald eine Liste der IRemoteSystemFilter Objekte 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 Watchers aufgerufen wird, löst es 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 RemoteSystem--Objekte und das Herstellen einer Verbindung mit Remotegeräten identisch mit Starten einer Remote-App. Kurz gesagt, werden die RemoteSystem--Objekte als Eigenschaften von RemoteSystemAddedEventArgs-Objekten gespeichert, die mit jedem RemoteSystemAdded-Ereignis übergeben werden.

Geräte anhand der Adresseingabe entdecken

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 Fähigkeiten wie Remotesitzungskonnektivität oder räumliche Entitätsfreigabe (holografische) zu unterstützen. Die Liste der abfragefähigen Funktionen finden Sie in der Klasse KnownRemoteSystemCapabilities.

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

Nutzerübergreifende Entdeckung

Entwickler können die Ermittlung von allen Geräten in der Nähe des Clientgeräts ermöglichen, nicht nur Geräte, die für denselben Benutzer registriert sind. Dies wird über einen speziellen IRemoteSystemFilter, RemoteSystemAuthorizationKindFilterimplementiert. 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 RemoteSystemAuthorizationKind Wert von Anonymous ermöglicht die Ermittlung aller nahegelegenen Geräte, einschließlich solcher von nicht vertrauenswürdigen Benutzern.
  • Ein Wert von SameUser filtert die Ermittlung auf nur Geräte, die für denselben Benutzer registriert sind wie das Clientgerät. Dies ist das Standardverhalten.

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

Zusätzlich zum oben genannten Filter, der in Ihrer Entdeckungs-App angegeben ist, muss das Clientgerät selbst so konfiguriert werden, dass es geteilte Erfahrungen von Geräten erlaubt, die mit anderen Benutzern angemeldet wurden. 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 "Einstellungen" öffnen. Im System>Freigegebene Erfahrungen>Für Geräteübergreifendes Freigeben Menü gibt es ein Dropdown-Menü, in dem der Benutzer angeben kann, für welche Geräte sein System freigeben werden kann.

„Seite der Einstellungen für gemeinsame Erfahrungen“