Partage de données avec des applications distantes à l'aide du tethering d'app

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation du tethering d'app


L'implémentation du tethering d'app de la RTL fournit la prise en charge du partage de données entre les applications connectées.

Envoi de données à des applications connectées

Vous pouvez utiliser l'une des approches suivantes pour envoyer des données à l'aide du tethering d'app :

  • Définir les ressources partagées. Une ressource encapsule une valeur. Les applications connectées peuvent lire la valeur d'une ressource partagée, et s'abonner à une ressource partagée afin de recevoir des mises à jour lorsque la valeur de la ressource partagée change.
  • Envoyer des données en tant que ressource temporaire. Vous pouvez envoyer des chaînes et des flux à l'exécution que les applications connectées recevront sous la forme de ressources temporaires. Les applications connectées ne peuvent pas s'abonner à des ressources temporaires à des fins de mise à jour, puisque votre application n'envoie les ressources temporaires qu'une seule fois.

Partage des ressources

Un TLocalResource est un wrapper englobant un type de données standard (Boolean, Integer, Int64, Single, Double, String) ou un TStream. Vous pouvez partager des ressources avec des applications connectées à l'aide du tethering d'app.

Pour créer et partager une ressource :

  1. Sélectionnez votre composant TTetheringAppProfile sur le Concepteur de fiches et double-cliquez sur sa propriété Ressources sur l'inspecteur d'objets.
  2. Sur l'éditeur de liste qui s'ouvre, cliquez sur Nouveau pour ajouter un nouveau TLocalResource à la liste.
  3. Avec votre nouveau TLocalResource sélectionné sur l'éditeur de liste, donnez une valeur unique à sa propriété Name sur l'inspecteur d'objets.
TLocalResource Editing.png

Votre ressource est désormais partagée à l'aide du tethering d'app. Des applications connectées peuvent lire la valeur de cette ressource et s'abonner à la ressource à des fins de mise à jour. Ainsi, lorsque la valeur de la ressource change dans vos applications, les applications connectées sont notifiées du changement et elles peuvent lire la nouvelle valeur.

Après la définition de votre ressource à la conception, vous devez donner à votre ressource une valeur à l'exécution :

  • Dans Delphi :
    • TetheringAppProfile1.Resources.FindByName('ResourceName').Value := 'SomeValue';
    • TetheringAppProfile1.Resources.Items[ResourceNumber].Value := 'SomeValue';
  • Dans C++ :
    • TetheringAppProfile1->Resources->FindByName("ResourceName")->Value = "SomeValue";
    • TetheringAppProfile1->Resources->Items[ResourceNumber]->Value = "SomeValue";
Où :
  • ResourceName est le nom que vous entrez dans la propriété Name de la ressource lorsque vous la créez à la conception.
  • SomeValue est la valeur que vous souhaitez donner à la ressource. Cette valeur peut être l'un des types de données standard listés ci-dessus.
  • ResourceNumber est le numéro de l'élément dans la propriété Items du TResourceCollection lorsque vous le créez à la conception.

Les applications connectées peuvent demander la valeur de votre ressource partagée à tout moment et s'abonner à votre ressource partagée à des fins de mise à jour. Ainsi, lorsque vous changez la valeur de la ressource, les profils d'application distante abonnés reçoivent la ressource mise à jour.

Envoi de données en tant que ressource temporaire

A la place du partage des ressources, vous pouvez utiliser les méthodes SendString et SendStream de votre TTetheringAppProfile pour envoyer des chaînes ou des flux aux applications connectées.

Les profils d'application distante reçoivent la valeur encapsulée dans une ressource temporaire. Une ressource temporaire est une ressource que votre profil d'application envoie une seule fois aux applications connectées. Cette ressource temporaire est ensuite supprimée ; les applications connectées ne peuvent pas s'abonner à cette ressource à des fins de mise à jour.

Cette méthode attend les paramètres suivants :

  • AProfile est un profil d'application distante en tant qu'instance de TTetheringProfileInfo. La propriété RemoteProfiles de votre composant TTetheringManager fournit une liste de profils d'application distante qui sont connectés à votre profil. Vous pouvez parcourir cette liste pour trouver le profil d'application distante que vous voulez.
  • Description est une chaîne qui décrit le contenu de la valeur que vous envoyez.
  • AString ou AStream est la valeur à envoyer.

Si vous voulez envoyer des types de données standard autres que String en utilisant des ressources temporaires, vous devez les convertir en chaînes avant de les envoyer, puis les reconvertir à leur type original sur l'application connectée qui reçoit la chaîne. Voir JSON.

Réception de données à partir d'applications connectées

Votre application peut recevoir une ressource, soit parce que le profil d'application distant l'envoie ou parce que vous la demandez. Vous pouvez gérer toute ressource distante entrante au moyen de votre composant TTetheringAppProfile.

Vous pouvez également vous abonner à une ressource distante à des fins de mise à jour. Lorsque la valeur de la ressource distante change, votre application est notifiée du changement et elle reçoit la nouvelle valeur de la ressource distante. Autrement, si vous utilisez des groupes pour la connexion à des applications distantes, vous pouvez utiliser les ressources locales pour s'abonner aux ressources distantes et définir des méthodes distinctes pour gérer les mises à jour de chacune des ressources distantes abonnées.

Demande de ressources distantes

Votre composant TTetheringAppProfile fournit une méthode, GetRemoteResourceValue, que vous pouvez utiliser pour demander une ressource distante.

Vous pouvez spécifier une ressource distante à demander avec l'un des jeux de paramètres suivants :

  • Fournissez le profil d'application distante qui contient la ressource distante sous la forme d'une instance de TTetheringProfileInfo et le nom de la ressource distante.
La propriété RemoteProfiles de votre composant TTetheringManager fournit une liste de profils d'applications distantes qui sont connectés à votre profil.
Votre composant TTetheringAppProfile fournit une méthode, GetRemoteProfileResources, qui renvoie une liste des ressources distantes partagées par un profil d'application distante donné, spécifié en tant qu'instance de TTetheringProfileInfo.

Gestion des ressources distantes entrantes

Votre composant TTetheringAppProfile peut recevoir des ressources distantes pour l'une des raisons suivantes :

  • Un profil d'application distante envoie une ressource temporaire.
  • Vous demandez une ressource distante.

Lorsque votre composant TTetheringAppProfile reçoit une ressource, deux événements du composant TTetheringAppProfile se produisent dans l'ordre suivant : OnAcceptResource et OnResourceReceived. Pour gérer les ressources entrantes, vous devez gérer ces événements.

OnAcceptResource Image.png

Acceptation ou rejet d'une ressource distante entrante

Vous pouvez gérer OnAcceptResource pour déterminer si vous acceptez une ressource entrante donnée. Cet événement fournit les paramètres suivants :

  • Sender est votre composant TTetheringAppProfile sur le point de recevoir la ressource entrante.
  • AProfileId est le ProfileIdentifier du profil d'application distante qui envoie la ressource. La propriété RemoteProfiles de votre composant TTetheringManager fournit une liste de profils d'application distante qui sont connectés à votre profil. Vous pouvez parcourir cette liste pour trouver le profil d'application distante qui correspond à l'ID de profil spécifié.
  • AResource est une instance de TCustomRemoteItem qui contient les propriétés que vous pouvez lire pour déterminer si vous acceptez la ressource distante entrante, comme par exemple la propriété Name de la ressource ou la propriété Hint qui décrit son contenu.
  • AcceptResource est une valeur booléenne qui vaut True par défaut. Vous pouvez définir cette valeur sur False si vous ne voulez pas recevoir la ressource entrante.

Lecture d'une ressource distante entrante

Si vous ne gérez pas l'événement OnAcceptResource ou ne modifiez pas la valeur de AcceptResource sur False dans votre gestionnaire d'événement, l'événement OnResourceReceived se produit. Vous pouvez gérer cet événement de façon à lire les données de la ressource. Cet événement fournit les paramètres suivants :

  • Sender est votre composant TTetheringAppProfile sur le point de recevoir la ressource entrante.
  • AResource est une instance de TRemoteResource. TRemoteResource étend TCustomRemoteItem avec deux propriétés qui vous donnent accès à la valeur réelle de la ressource :
    • TRemoteResource.ResType indique si la ressource contient un type de données standard (TRemoteResourceType.Data) ou un TStream (TRemoteResourceType.Stream).
    • TRemoteResource.Value fournit un accès à la valeur. Pour obtenir la valeur :
      • Si la valeur est un type de données standard, cochez TRemoteResource.Value.DataType pour déterminer le type de données, et lisez la propriété TRemoteResource.Value correspondante : AsBoolean, AsInteger, AsInt64, AsSingle, AsDouble, AsString.
      • Si la valeur est un flux, lisez le flux depuis TRemoteResource.Value.AsStream.

S'abonner à des ressources distantes à des fins de mise à jour

Lorsque votre application est connectée à une application qui partage des ressources, vous pouvez vous abonner à ces ressources partagées à des fins de mise à jour, afin que votre application reçoive ces ressources partagées lorsque leur valeur change dans l'application connectée.

Si vous utilisez des groupes pour établir une connexion à d'autres applications, vous pouvez associer les ressources distantes aux ressources locales à la conception. Ces ressources locales fournissent un événement que vous pouvez utiliser pour gérer les modifications apportées à la valeur de la ressource distante.

Vous pouvez également vous abonner aux ressources distantes à l'exécution en utilisant leur nom de ressource.

Remarque : Vous ne devez pas vous abonner à une ressource distante en utilisant à la fois une ressource locale et SubscribeToRemoteItem. Utilisez seulement l'une de ces méthodes d'abonnement pour chaque ressource distante.

S'abonner à des ressources distantes en utilisant des ressources locales sur des applications connectées à l'aide de groupes

Pour associer une ressource locale à une ressource distante à la conception :

  1. Suivez les étapes ci-dessus pour créer et partager une ressource à l'aide du tethering d'app.
  2. Une fois votre nouveau TLocalResource sélectionné sur l'éditeur de liste de ressources, définissez sa propriété Kind sur Mirror sur l'inspecteur d'objets.
TLocalResource Kind Property.png

Lorsque vous définissez la propriété Kind de votre TLocalResource sur Mirror, votre TLocalResource n'est pas partagé avec les applications distantes. A la place, à chaque modification de la valeur d'une ressource distante portant le même Nom que le nom spécifié dans votre TLocalResource, la valeur de votre ressource locale est mise à jour, et l'événement TLocalResource.OnResourceReceived se produit.

S'abonner aux ressources distantes à l'aide de SubscribeToRemoteItem

Votre composant TTetheringAppProfile fournit une méthode, SubscribeToRemoteItem, que vous pouvez utiliser pour l'abonnement à des ressources distantes à des fins de mise à jour.

Vous pouvez spécifier une ressource distante pour abonnement en utilisant l'un des jeux de paramètres suivants :

  • Fournissez le profil d'application distante qui contient la ressource distante sous la forme d'une instance de TTetheringProfileInfo et le nom de la ressource distante.
La propriété RemoteProfiles de votre composant TTetheringManager fournit une liste de profils d'applications distantes qui sont connectés à votre profil.
  • Fournissez le profil d'application distante qui contient la ressource distante sous la forme d'une instance de TTetheringProfileInfo et d'une instance de TCustomRemoteItem.
Votre composant TTetheringAppProfile fournit une méthode, GetRemoteProfileActions, qui renvoie une liste des ressources distantes partagées par un profil d'application distante donné, spécifié en tant qu'instance de TTetheringProfileInfo.

Lorsque la valeur d'une ressource distante de même nom que l'instance de TCustomRemoteItem à laquelle vous êtes abonné change, la valeur de l'instance de TCustomRemoteItem abonnée est mise à jour, et l'événement OnResourceUpdated se produit.

Remarques :
  • Pour lire la valeur de l'instance abonnée de TCustomRemoteItem, vous devez transtyper cette instance en tant que TRemoteResource et lire ses données. Voir Lecture d'une ressource distante entrante.
  • Lorsqu'une ressource distante qui encapsule un flux change, l'événement OnResourceUpdated se produit, mais la valeur de l'instance abonnée de TCustomRemoteItem n'est pas mise à jour. Vous devez demander manuellement la nouvelle valeur de la ressource. Voir Demande de ressources distantes.
  • L'événement OnResourceUpdated ne se produit pas si vous vous abonnez à la même ressource distante en utilisant une ressource locale.

Voir aussi