Partage de données avec des applications distantes à l'aide du tethering d'app
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.
Sommaire
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 :
- Sélectionnez votre composant TTetheringAppProfile sur le Concepteur de fiches et double-cliquez sur sa propriété Ressources sur l'inspecteur d'objets.
- Sur l'éditeur de liste qui s'ouvre, cliquez sur pour ajouter un nouveau TLocalResource à la liste.
- Avec votre nouveau TLocalResource sélectionné sur l'éditeur de liste, donnez une valeur unique à sa propriété Name sur l'inspecteur d'objets.
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
ouAStream
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.
- Fournissez une instance de TRemoteResource.
- 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.
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 vautTrue
par défaut. Vous pouvez définir cette valeur surFalse
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 :
- Suivez les étapes ci-dessus pour créer et partager une ressource à l'aide du tethering d'app.
- 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.
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
- Ajout du tethering d'app à votre application
- Connexion à des applications distantes à l'aide du tethering d'app
- Partage et exécution d'actions sur des applications distantes à l'aide du tethering d'app
- Exemple BDShoppingList
- Exemple DesktopCast
- Exemple MediaPlayer
- Exemple PhotoWall