Freigeben über


Starten einer App auf einem Remotegerät

In diesem Artikel wird erläutert, wie Sie eine Windows-App auf einem Remotegerät starten.

Ab Windows 10, Version 1607, kann eine UWP-App eine UWP-App oder Eine Windows-Desktopanwendung remote auf einem anderen Gerät starten, auf dem auch Windows 10, Version 1607 oder höher ausgeführt wird, vorausgesetzt, beide Geräte sind mit demselben Microsoft-Konto (MSA) angemeldet. Dies ist der einfachste Anwendungsfall von Project Rome.

Die Remotestartfunktion ermöglicht aufgabenorientierte Benutzererfahrungen; Ein Benutzer kann eine Aufgabe auf einem Gerät starten und auf einem anderen Gerät beenden. Wenn der Benutzer beispielsweise Musik auf dem Smartphone in ihrem Auto hört, könnte er die Wiedergabefunktion dann an die Xbox One übergeben, wenn er zu Hause ankommt. Mit dem Remotestart können Apps kontextbezogene Daten an die gestartete Remote-App übergeben, um den Speicherort der Aufgabe aufzunehmen.

Vorläufige Einstellungen

Hinzufügen der RemoteSystem-Funktion

Damit Ihre App eine App auf einem Remotegerät starten kann, müssen Sie dem App-Paketmanifest die remoteSystem Funktion hinzufügen. Sie können den Paketmanifest-Designer verwenden, um es hinzuzufügen, indem Sie remote system auf der Registerkarte "Funktionen" auswählen, oder Sie können die folgende Zeile manuell zur Datei "Package.appxmanifest" Ihres Projekts hinzufügen.

<Capabilities>
   <uap3:Capability Name="remoteSystem"/>
</Capabilities>

Aktivieren der geräteübergreifenden Freigabe

Darüber hinaus muss das Clientgerät so festgelegt werden, dass die geräteübergreifende Freigabe zulässig ist. Diese Einstellung, auf die unter "Einstellungen" zugegriffen wird: Gemeinsame Systemfunktionen>>, die geräteübergreifend freigegeben werden, sind standardmäßig aktiviert.

Seite

Suchen eines Remotegeräts

Sie müssen zuerst das Gerät finden, mit dem Sie eine Verbindung herstellen möchten. Entdecken Sie Remotegeräte , die dies im Detail tun. Wir verwenden hier einen einfachen Ansatz, bei dem die Filterung nach Geräte- oder Verbindungstyp erfolgt. Wir erstellen eine Remotesystemüberwachung, die nach Remotegeräten sucht, und schreiben Handler für die Ereignisse, die ausgelöst werden, wenn Geräte erkannt oder entfernt werden. Dadurch erhalten wir eine Sammlung von Remotegeräten.

Der Code in diesen Beispielen erfordert, dass Sie eine using Windows.System.RemoteSystems Anweisung in Ihren Klassendateien haben.

private async Task BuildDeviceList()
{
    RemoteSystemAccessStatus accessStatus = await RemoteSystem.RequestAccessAsync();

    if (accessStatus == RemoteSystemAccessStatus.Allowed)
    {
        m_remoteSystemWatcher = RemoteSystem.CreateWatcher();

        // Subscribing to the event raised when a new remote system is found by the watcher.
        m_remoteSystemWatcher.RemoteSystemAdded += RemoteSystemWatcher_RemoteSystemAdded;

        // Subscribing to the event raised when a previously found remote system is no longer available.
        m_remoteSystemWatcher.RemoteSystemRemoved += RemoteSystemWatcher_RemoteSystemRemoved;

        m_remoteSystemWatcher.Start();
    }
}

Das erste, was Sie tun müssen, bevor Sie einen Remotestart durchführen, ist ein Anruf RemoteSystem.RequestAccessAsync(). Überprüfen Sie den Rückgabewert, um sicherzustellen, dass Ihre App auf Remotegeräte zugreifen darf. Ein Grund, warum diese Überprüfung fehlschlägt, ist, wenn Sie Ihrer remoteSystem App die Funktion nicht hinzugefügt haben.

Die Ereignishandler der Systemüberwachung werden aufgerufen, wenn ein Gerät, mit dem wir eine Verbindung herstellen können, erkannt wird oder nicht mehr verfügbar ist. Wir verwenden diese Ereignishandler, um eine aktualisierte Liste der Geräte beizubehalten, mit denen wir eine Verbindung herstellen können.

private void RemoteSystemWatcher_RemoteSystemRemoved(
    RemoteSystemWatcher sender, RemoteSystemRemovedEventArgs args)
{
    if ( m_deviceMap.ContainsKey(args.RemoteSystemId))
    {
        m_deviceList.Remove(m_deviceMap[args.RemoteSystemId]);
        m_deviceMap.Remove(args.RemoteSystemId);
    }
}

private void RemoteSystemWatcher_RemoteSystemAdded(
    RemoteSystemWatcher sender, RemoteSystemAddedEventArgs args)
{
    m_deviceList.Add(args.RemoteSystem);
    m_deviceMap.Add(args.RemoteSystem.Id, args.RemoteSystem);
}

Wir verfolgen die Geräte anhand der Remotesystem-ID mithilfe eines Wörterbuchs. Eine ObservableCollection wird verwendet, um die Liste der Geräte zu speichern, die wir aufzählen können. Eine ObservableCollection macht es auch einfach, die Liste der Geräte an die Benutzeroberfläche zu binden, obwohl dies in diesem Beispiel nicht der Fall ist.

private RemoteSystemWatcher m_remoteSystemWatcher;
private ObservableCollection<RemoteSystem> m_deviceList = new ObservableCollection<RemoteSystem>();
private Dictionary<string, RemoteSystem> m_deviceMap = new Dictionary<string, RemoteSystem>();

Fügen Sie einen Aufruf BuildDeviceList() in Ihrem App-Startcode hinzu, bevor Sie versuchen, eine Remote-App zu starten.

Starten einer App auf einem Remotegerät

Starten Sie eine App remote, indem Sie das Gerät übergeben, mit dem Sie eine Verbindung mit der RemoteLauncher.LaunchUriAsync-API herstellen möchten. Für diese Methode gibt es drei Überladungen. Das einfachste Beispiel, das in diesem Beispiel veranschaulicht wird, gibt den URI an, der die App auf dem Remotegerät aktiviert. In diesem Beispiel öffnet der URI die Karten-App auf dem Remotecomputer mit einer 3D-Ansicht der Space Needle.

Mit anderen RemoteLauncher.LaunchUriAsync-Überladungen können Sie Optionen angeben, z. B. den URI der Website, die angezeigt werden sollen, wenn keine entsprechende App auf dem Remotegerät gestartet werden kann, und eine optionale Liste der Paketfamiliennamen, die zum Starten des URI auf dem Remotegerät verwendet werden können. Sie können auch Daten in Form von Schlüssel-Wert-Paaren bereitstellen. Sie können Daten an die App übergeben, die Sie aktivieren, um Kontext für die Remote-App bereitzustellen, z. B. den Namen des zu wiedergebenden Titels und den aktuellen Wiedergabespeicherort, wenn Sie die Wiedergabe von einem Gerät an ein anderes übergeben.

In praktischen Szenarien können Sie ui bereitstellen, um das Gerät auszuwählen, auf das Sie abzielen möchten. Um dieses Beispiel zu vereinfachen, verwenden wir lediglich das erste Remotegerät in der Liste.

if ( m_deviceList.Count > 0)
{
    RemoteSystem SelectedDevice = m_deviceList[0];
    RemoteLaunchUriStatus launchUriStatus = 
        await RemoteLauncher.LaunchUriAsync(
            new RemoteSystemConnectionRequest(SelectedDevice), 
            new Uri("bingmaps:?cp=47.6204~-122.3491&sty=3d&rad=200&pit=75&hdg=165"));
}

Das RemoteLaunchUriStatus -Objekt, das von RemoteLauncher.LaunchUriAsync() zurückgegeben wird, stellt Informationen darüber bereit, ob der Remotestart erfolgreich war, und wenn nicht, der Grund dafür.

API-Referenz für Remotesysteme
Übersicht über verbundene Apps und Geräte (Project Rome)
Entdecken von Remotegeräten
Beispiel für Remotesysteme zeigt, wie Sie ein Remotesystem ermitteln, eine App auf einem Remotesystem starten und App-Dienste verwenden, um Nachrichten zwischen Apps zu senden, die auf zwei Systemen ausgeführt werden.