Teilen von Daten mit Remote-Anwendungen mithilfe von App-Tethering

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Verwenden von App-Tethering


Die App-Tethering-Implementierung der RTL stellt die Unterstützung für das Teilen von Daten zwischen verbundenen Anwendungen bereit.

Senden von Daten an verbundene Anwendungen

Sie können mit den folgenden Verfahren Daten mithilfe von App-Tethering senden:

  • Definieren von geteilten Ressourcen. Ein Ressource enthält einen Wert. Verbundene Anwendungen können den Wert einer geteilten Ressource lesen und eine geteilte Ressource abonnieren, um bei Änderungen des Werts der geteilten Ressource Aktualisierungen zu erhalten.
  • Senden von Daten als temporäre Ressource. Sie können zur Laufzeit Strings und Streams senden, die verbundene Anwendungen als temporäre Ressourcen empfangen. Verbundene Anwendungen können keine temporären Ressourcen für Aktualisierungen empfangen, weil Ihre Anwendung temporäre Ressourcen nur einmal sendet.

Teilen von Ressourcen

Eine TLocalResource ist ein Wrapper für einen Standarddatentyp (Boolean, Integer, Int64, Single, Double, String) oder einen TStream. Sie können Ressourcen mit verbundenen Anwendungen mithilfe von App-Tethering teilen.

So erstellen und teilen Sie eine Ressource:

  1. Wählen Sie im Formular-Designer Ihre TTetheringAppProfile-Komponente aus, und doppelklicken Sie im Objektinspektor auf die Eigenschaft Resources.
  2. Klicken Sie im angezeigten Listen-Editor auf Neu, um der Liste eine neue TLocalResource hinzuzufügen.
  3. Wählen Sie im Listen-Editor Ihre neue TLocalResource aus, und geben Sie im Objektinspektor für deren Eigenschaft Name einen eindeutigen Namen an.
TLocalResource Editing.png

Ihre Ressource wird jetzt per App-Tethering geteilt. Verbundene Anwendungen können den Wert dieser Ressource lesen und die Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts in Ihren Anwendungen verbundene Anwendungen über die Änderung benachrichtigt werden und den neuen Wert lesen können.

Nachdem Sie Ihre Ressource beim Entwurf definiert haben, müssen Sie ihr zur Laufzeit einen Wert zuweisen:

  • In Delphi:
    • TetheringAppProfile1.Resources.FindByName('ResourceName').Value := 'SomeValue';
    • TetheringAppProfile1.Resources.Items[ResourceNumber].Value := 'SomeValue';
  • In C++:
    • TetheringAppProfile1->Resources->FindByName("ResourceName")->Value = "SomeValue";
    • TetheringAppProfile1->Resources->Items[ResourceNumber]->Value = "SomeValue";
Beschreibung:
  • ResourceName ist der Name, den Sie in die Eigenschaft Name der Ressource eingeben, wenn Sie sie zur Laufzeit erstellen.
  • SomeValue ist der Wert, den Sie für die Ressource festlegen möchten. Dieser Wert kann einen der oben aufgeführten Standarddatentypen haben.
  • ResourceNumber ist die Anzahl der Einträge in der Eigenschaft Items der TResourceCollection, wenn Sie sie in Entwurfszeit erstellen.

Verbundene Anwendungen können jederzeit den Wert Ihrer geteilten Ressource anfordern und die geteilte Ressource abonnieren, um Aktualisierungen zu erhalten, sodass bei Änderungen des Ressourcenwerts die abonnierten Remote-Anwendungsprofile die aktualisierte Ressource erhalten.

Senden von Daten als temporäre Ressource

Anstatt Ressourcen zu teilen, können Sie mit den Methoden SendString und SendStream der TTetheringAppProfile-Komponente Strings oder Streams an verbundene Anwendungen senden.

Remote-Anwendungsprofile empfangen den Wert, der in einer temporären Ressource enthalten ist. Eine temporäre Ressource wird von Ihrem Anwendungsprofil nur einmal an verbundene Anwendungen gesendet. Diese temporäre Ressource wird anschließend gelöscht; verbundene Anwendungen können diese Ressource nicht abonnieren, um Aktualisierungen zu erhalten.

Diese Methode erwartet die folgenden Parameter:

  • AProfile ist ein Remote-Anwendungsprofil als Instanz von TTetheringProfileInfo. Die Eigenschaft RemoteProfiles der TTetheringManager-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem gewünschten Remote-Anwendungsprofil durchsuchen.
  • Description ist ein String, der den Inhalt des gesendeten Wertes beschreibt.
  • AString oder AStream ist der Wert, der gesendet werden soll.

Wenn Sie mit temporären Ressourcen andere Standarddatentypen als String senden möchten, müssen Sie diese Datentypen vor dem Senden in Strings konvertieren und dann in der verbundenen Anwendung, die den String empfängt, wieder zurück in ihren Originaltyp konvertieren. Siehe JSON.

Empfangen von Daten von verbundenen Anwendungen

Ihre Anwendung kann eine Ressource erhalten, entweder weil das Remote-Anwendungsprofil es sendet, oder weil Sie es anfordern. Sie können jede eingehende Remote-Ressource mit Ihrer TTetheringAppProfile-Komponente verarbeiten.

Darüber hinaus können Sie eine Remote-Ressource abonnieren, um Aktualisierungen zu erhalten. Wenn sich der Wert der Remote-Ressource ändert, wird Ihre Anwendung über die Änderung informiert und empfängt den neuen Wert der Remote-Ressource. Wenn Sie die Verbindung zu Remote-Anwendungen über Gruppen herstellen, können Sie alternativ mit lokalen Ressourcen Remote-Ressourcen abonnieren und separate Methoden definieren, um Aktualisierungen jeder einzelnen der abonnierten Remote-Ressourcen zu verarbeiten.

Anfordern von Remote-Ressourcen

Die TTetheringAppProfile-Komponente stellt eine Methode, GetRemoteResourceValue, bereit, mit der Sie Remote-Ressourcen anfordern können.

Sie können eine Remote-Ressource für die Anforderung mit einer der folgenden Parametergruppen festlegen:

  • Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und den Namen der Remote-Ressource enthält.
Die Eigenschaft RemoteProfiles Ihrer TTetheringManager-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.
Die TTetheringAppProfile-Komponente enthält eine Methode, GetRemoteProfileResources, die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.

Verarbeiten von eingehenden Remote-Ressourcen

Die TTetheringAppProfile-Komponente kann Remote-Ressourcen aus einem der folgenden Gründe erhalten:

  • Ein Remote-Anwendungsprofil sendet eine temporäre Ressource.
  • Sie fordern eine Remote-Ressource an.

Wenn die TTetheringAppProfile-Komponente eine Ressource empfängt, werden zwei Ereignisse der TTetheringAppProfile-Komponente in der folgenden Reihenfolge ausgelöst: OnAcceptResource und OnResourceReceived. Zur Verarbeitung von eingehenden Ressourcen müssen Sie diese Ereignisse behandeln.

OnAcceptResource Image.png

Annehmen oder Ablehnen einer eingehenden Remote-Ressource

Sie können OnAcceptResource behandeln, um festzulegen, ob Sie eine eingehende Ressource akzeptieren oder nicht. Dieses Ereignis stellt die folgenden Parameter bereit:

  • Sender ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.
  • AProfileId ist der ProfileIdentifier des Remote-Anwendungsprofils, das die Ressource sendet. Die Eigenschaft RemoteProfiles der TTetheringManager-Komponente stellt eine Liste der Remote-Anwendungsprofile bereit, die mit Ihrem Profil verbunden sind; Sie können diese Liste nach dem mit der angegebenen Profil-ID übereinstimmenden Remote-Anwendungsprofil durchsuchen.
  • AResource ist eine Instanz von TCustomRemoteItem, die Eigenschaften enthält, die Sie lesen können, um festzulegen, ob Sie die eingehende Remote-Ressource annehmen oder nicht, z. B. den Namen der Ressource oder einen Hinweis, der deren Inhalt beschreibt.
  • AcceptResource ist ein boolescher Wert, der standardmäßig auf True gesetzt ist. Sie können diesen Wert in False ändern, wenn Sie die eingehende Ressource nicht empfangen möchten.

Lesen einer eingehenden Remote-Ressource

Wenn Sie das Ereignis OnAcceptResource nicht behandeln oder in Ihrer Ereignisbehandlungsroutine den Wert von AcceptResource nicht in False ändern, wird das Ereignis OnResourceReceived ausgelöst. Sie können dieses Ereignis behandeln, um die Daten aus der Ressource zu lesen. Dieses Ereignis stellt die folgenden Parameter bereit:

  • Sender ist Ihre TTetheringAppProfile-Komponente, die gerade die eingehende Ressource empfängt.
  • AResource ist eine Instanz von TRemoteResource. TRemoteResource erweitert TCustomRemoteItem um zwei Eigenschaften, über die Sie auf den tatsächlichen Wert der Ressource zugreifen können:
    • TRemoteResource.ResType gibt an, ob die Ressource einen Standarddatentyp (TRemoteResourceType.Data) oder einen TStream (TRemoteResourceType.Stream) enthält.
    • Mit TRemoteResource.Value können Sie auf den Wert zugreifen. So rufen Sie den Wert ab:
      • Wenn der Wert ein Standarddatentyp ist, überprüfen Sie TRemoteResource.Value.DataType, um den Typ der Daten zu ermitteln, und lesen Sie die entsprechende TRemoteResource.Value-Eigenschaft: AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.
      • Wenn der Wert ein Stream ist, lesen Sie den Stream aus TRemoteResource.Value.AsStream.

Abonnieren von Remote-Ressourcen, um Aktualisierungen zu erhalten

Wenn Ihre Anwendung mit einer Anwendung verbunden ist, die Ressourcen teilt, können Sie diese geteilten Ressourcen abonnieren, um Aktualisierungen zu erhalten, sodass Ihre Anwendung diese geteilten Ressourcen erhält, sobald sich deren Wert in der verbundenen Anwendung ändert.

Wenn Sie mit Gruppen Verbindungen zu anderen Anwendungen herstellen, können Sie beim Entwurf die Remote-Ressourcen zu lokalen Ressourcen zuordnen. Diese lokalen Ressourcen verfügen ein Ereignis, mit dem Sie die Änderungen des Wertes der Remote-Ressource behandeln können.

Alternativ können Sie die Remote-Ressourcen zur Laufzeit über ihren Ressourcennamen abonnieren.

Hinweis: Sie dürfen eine Remote-Ressource nicht gleichzeitig mit einer lokalen Ressource und SubscribeToRemoteItem abonnieren. Verwenden Sie für jede Remote-Ressource nur eine dieser Abonnementmethoden.

Abonnieren von Remote-Ressourcen mit lokalen Ressourcen für über Gruppen verbundene Anwendungen

So ordnen Sie beim Entwurf eine lokale Ressource einer Remote-Ressource zu:

  1. Befolgen Sie die obigen Schritte, um eine Ressource zu erstellen und mithilfe von App-Tethering zu teilen.
  2. Wählen Sie im Ressourcenlisten-Editor Ihre neue TLocalResource aus, und ändern Sie im Objektinspektor deren Eigenschaft Kind in Mirror.
TLocalResource Kind Property.png

Wenn Sie die Eigenschaft Kind Ihrer TLocalResource in Mirror ändern, wird Ihre TLocalResource nicht mit Remote-Anwendungen geteilt. Sondern bei jeder Änderung des Wertes einer Remote-Ressource mit demselben Namen wie der Name, den Sie in Ihrer TLocalResource angegeben haben, wird der Wert Ihrer lokalen Ressource aktualisiert und das Ereignis TLocalResource.OnResourceReceived ausgelöst.

Abonnieren von Remote-Ressourcen mit SubscribeToRemoteItem

Die TTetheringAppProfile-Komponente stellt eine Methode, SubscribeToRemoteItem, bereit, mit der Sie Remote-Ressourcen abonnieren können, um Aktualisierungen zu erhalten.

Sie können eine Remote-Ressource zum Abonnieren mit einer der folgenden Parametergruppen festlegen:

  • Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und den Namen der Remote-Ressource enthält.
Die Eigenschaft RemoteProfiles Ihrer TTetheringManager-Komponente enthält eine Liste der Remote-Anwendungsprofile, die mit Ihrem Profil verbunden sind.
  • Stellen Sie das Remote-Anwendungsprofil bereit, das die Remote-Ressource als Instanz von TTetheringProfileInfo und eine Instanz von TCustomRemoteItem enthält.
Die TTetheringAppProfile-Komponente enthält eine Methode, GetRemoteProfileActions, die eine Liste der Remote-Ressourcen zurückgibt, die von einem gegebenen Remote-Anwendungsprofil geteilt werden. Das Remote-Anwendungsprofil ist als Instanz von TTetheringProfileInfo festgelegt.

Ändert sich der Wert einer Remote-Ressource mit demselben Namen wie die Instanz von TCustomRemoteItem, die Sie abonniert haben, wird der Wert der abonnierten Instanz von TCustomRemoteItem aktualisiert und das Ereignis OnResourceUpdated ausgelöst.

Hinweise:
  • Um den Wert der abonnierten Instanz von TCustomRemoteItem zu lesen, müssen Sie den Typ dieser Instanz in TRemoteResource umwandeln und deren Daten lesen. Siehe Lesen einer eingehenden Remote-Ressource.
  • Ändert sich eine Remote-Ressource, die einen Stream enthält, wird das Ereignis OnResourceUpdated ausgelöst, aber der Wert der abonnierten Instanz von TCustomRemoteItem wird nicht aktualisiert. Sie müssen den neuen Ressourcenwert manuell anfordern. Siehe Anfordern von Remote-Ressourcen.
  • Das Ereignis OnResourceUpdated wird nicht ausgelöst, wenn Sie dieselbe Remote-Ressource mit einer lokalen Ressource abonnieren.

Siehe auch