Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK
Code

Get Wear OS et Android Parler: Échanger des informations via la couche de données portable

by
Difficulty:IntermediateLength:LongLanguages:

French (Français) translation by Soleil (you can also view the original English article)

Quand il s’agit de réaliser des tâches simples et rapides, les applications portables ont l’avantage, car une smartwatch sur votre poignet sera toujours plus accessible qu’un smartphone ou une tablette qui flotte quelque part dans votre sac.

Mais il n’ya rien de tel que le gadget parfait, et personne ne vante la vie de la batterie de sa smartwatch ou prétendant qu’il est tout aussi rapide et puissant que son smartphone ou sa tablette.

Pour offrir la meilleure expérience utilisateur possible, vous devez utiliser les atouts de l’appareil. Si vous développez pour Wear OS (le système d'exploitation anciennement connu sous le nom d'Android-Wear), vous êtes dans une position unique pour choisir les meilleures fonctionnalités à partir de deux appareils très différents.

Fondamentalement, vous pouvez avoir le meilleur des deux mondes!

Dans cet article, je vais vous montrer comment tirer le meilleur parti de tout ce que Android OS et Wear OS peut offrir, en ouvrant un canal de communication entre les deux. Une fois que votre application portable et son homologue portable sont en train de discuter, vous pouvez déléguer des tâches en fonction du périphérique qui convient le mieux, que ce soit pour décharger des tâches gourmandes sur la batterie sur le poignet de l'utilisateur.

À la fin de cet article, vous avez créé un ordinateur de poche et une application portable pouvant échanger des informations via la couche de données portable et l’API MessageClient.

Qu'est-ce que la couche de données portable?

La couche de données portable donne accès à différentes classes de clients que vous pouvez utiliser pour stocker et récupérer des données, sans avoir à vous soucier des détails techniques tels que la sérialisation des données. Une fois ces informations présentes sur la couche de données, elles sont accessibles à la fois au terminal mobile et au périphérique portable.

Dans cet article, nous allons nous concentrer sur l’API MessageClient, un mécanisme de communication unidirectionnel que vous pouvez utiliser pour envoyer des informations à la couche de données portable. Cette API est particulièrement pratique pour exécuter des appels de procédure à distance (RPC), tels que le lancement à distance d’une Activity sur le périphérique portable ou portable associé.

Regardons un exemple: imaginez que vous avez créé une application de navigation. Cette application doit a) récupérer les mises à jour de l'emplacement, et b) donner les instructions à l'utilisateur.

La surveillance de l’emplacement de l’appareil est une tâche intensive qui peut rapidement épuiser la batterie disponible pour votre portable. À l'aide de l'API MessageClient, votre application portable peut demander à son homologue de poche d'effectuer ce travail à la place. Une fois que l’ordinateur de poche a effectué ce travail fastidieux, il peut renvoyer les informations obtenues à l’utilisateur via la couche de données afin que votre application récupère les informations dont elle a besoin sans retirer une partie de la batterie restante.

En règle générale, si votre application portable doit effectuer une tâche nécessitant une batterie ou une puissance de traitement importante, ou des interactions complexes entre utilisateurs, vous devriez alors envisager de décharger cette tâche sur l'application de l'ordinateur de poche correspondant. En revanche, si votre application utilise des informations particulièrement sensibles au temps ou un contenu auquel l'utilisateur est susceptible d'accéder lors de ses déplacements, vous devez alors afficher ces informations sur l'application portable.

Dans notre exemple d’application de navigation, le fait de pousser chaque ensemble d’orientation de l’ordinateur de poche vers l’ordinateur portable rend ces informations plus facilement accessibles, en particulier pour les personnes qui se débattent et qui sont désespérément perdues!

L’API MessageClient est un mécanisme de communication unidirectionnel, mais vous pouvez implémenter une messagerie bidirectionnelle en créant un expéditeur et un récepteur dans le module portable et portable de votre projet, ce qui est exactement ce que nous allons faire.

Création d'un module portable et portable

Dans cet article, nous allons créer une application portable qui reconnaîtra si son homologue de poche envoie un nouveau message à la couche de données. Cette application portable répondra en récupérant ce message et en l'affichant dans son interface utilisateur.

Ensuite, nous allons rincer et répéter, en créant une application portable qui surveille la couche de données pour les messages envoyés à partir de son homologue portable.

Les informations envoyées via l'API MessageClient sont uniquement accessibles à l'application qui les a créées. Si le système identifie votre portable et votre ordinateur de poche comme appartenant à la même application, ils doivent alors avoir le même nom de package, le même code de version et le même certificat de signature. La façon la plus simple de cocher toutes ces cases est de créer un projet composé d’un module portable et d’un module portable:

  • Créez un nouveau projet appelé DataLayer.
  • Sur l'écran Target Android Device, sélectionnez Phone and Tablet et Wear. Cliquez sur Next.
  • Pour votre module téléphone et tablette, sélectionnez le modèle Empty Activity, puis cliquez sur Next.
  • Pour votre module portable, sélectionnez le modèle Blank Wear Activity, puis cliquez sur Next, puis sur Finish.

Création de votre application portable

Comme nous mettons en œuvre une communication bidirectionnelle, notre ordinateur de poche et nos modules mobiles ont besoin de leur propre auditeur et expéditeur. Commençons par implémenter cette fonctionnalité dans notre application portable.

Je vais garder les choses simples et créer une interface utilisateur composée d’un TextView qui affichera les différents messages extraits de la couche de données et un bouton qui, une fois appuyé, enverra son propre message à la couche de données.

Ouvrez le fichier activity_main.xml de votre module mobile et ajoutez les éléments suivants:

Comme nous avons référencé quelques valeurs de dimens.xml, nous devons fournir des définitions pour ces valeurs:

  • Control-cliquez sur le répertoire res/values du module mobile.
  • Sélectionnez New > Values resource file.
  • Nommez ce fichier dimens.xml, puis cliquez sur OK.
  • Ajoutez ce qui suit:

Cela nous donne l'interface utilisateur suivante:

Create the user interface for your projects handheld component

Ajoutez vos dépendances

Ouvrez le fichier build.gradle du module mobile et ajoutez les dépendances suivantes:

Affichage et envoi de messages dans MainActivity

Dans MainActivity, nous devons effectuer les opérations suivantes:

  1. Gardez l'utilisateur dans la boucle!

Lorsque l'utilisateur appuie sur le bouton Talk to the Wearable, deux choses doivent se produire:

  • Le terminal envoie un message au portable. Je vais utiliser "I received a message from the handheld."
  • Le terminal mobile confirme visuellement que le message a bien été envoyé. Je vais utiliser "I sent a message to the wearable."

Lorsque l'utilisateur appuie sur le bouton Talk to the Wearable du terminal mobile, il tente d'envoyer un message à la couche de données. Le système considère uniquement que ce message a été envoyé avec succès une fois qu'il a été mis en file d'attente pour être livré à un périphérique spécifique, ce qui signifie qu'au moins un périphérique associé doit être disponible.

Dans le meilleur des cas, l'utilisateur appuie sur Talk to the Wearable, le message est mis en attente de livraison et notre ordinateur de poche déclare triomphalement: "I just sent a message to the wearable."

Toutefois, si aucun périphérique portable n’est disponible, le message n’est pas mis en file d’attente et, par défaut, l’utilisateur n’a pas la confirmation que notre application a même essayé d’envoyer un message. Cela pourrait amener l’utilisateur à se demander si l’application est cassée, alors je vais aussi afficher un Sending message…. notification, que le message soit correctement mis en file d'attente ou non.

Lorsque vous testez cette application, vous pouvez également déclencher plusieurs messages en succession rapide. Pour que chaque message soit mis en file d’attente, j’ajoute un compteur à chaque message afin que notre ordinateur de poche affiche I just sent a message to the wearable 2, I just sent a message to the wearable 3, etc. De l'autre côté de la connexion, notre portable affichera I just received a message from the handheld 2, I just received a message from the handheld 3, etc.

2. Afficher les messages reçus

Dans la section suivante, nous allons créer un MessageService qui surveille la couche de données et récupère les messages. Comme notre service effectuera son travail sur un thread différent, il transmettra ces informations à notre MainActivity, qui sera alors responsable de la mise à jour de l'interface utilisateur.

3. Définir le chemin

Chaque message que vous transmettez via l'API MessageClient doit contenir un chemin, qui est une chaîne qui identifie de manière unique le message et permet à votre application d'y accéder depuis l'autre côté de la connexion.

Ce chemin commence toujours par une barre oblique (j'utilise / my_path) et peut également contenir une charge utile optionnelle, sous la forme d'un tableau d'octets.

4. Vérifiez vos nœuds!

Dans les services Google Play 7.3.0 et versions ultérieures, vous pouvez connecter plusieurs ordinateurs portables à un seul ordinateur de poche. Par exemple, un utilisateur peut éclabousser plusieurs ordinateurs portables entre lesquels ils peuvent basculer ou utiliser simultanément. Un périphérique Wear OS peut également être connecté à plusieurs périphériques de poche pendant sa durée de vie, par exemple si l'utilisateur possède un smartphone Android et une tablette ou s'il remplace son ancien smartphone par un nouveau. Notez que tout périphérique capable de se connecter à la couche de données est appelé nœud dans le code de l'application.

Dans cet article, je vais supposer qu’un seul portable sera disponible. Vous pouvez également choisir les périphériques auxquels vous envoyez des messages, en utilisant GetConnectedNodes ou getLocalNode.

Implémentons tout cela dans notre MainActivity:

Créer un service d'écoute

À ce stade, notre ordinateur de poche est capable de transmettre des messages à la couche de données, mais comme nous souhaitons implémenter une communication bidirectionnelle, il doit également écouter les messages arrivant sur la couche de données.

Dans cette section, nous allons créer un service qui effectue les opérations suivantes:

  1. Surveiller la couche de données pour les événements

Vous pouvez surveiller la couche de données en implémentant l'interface DataClient.OnDataChangedListener ou en étendant WearableListenerService. J'opte pour ce dernier, car il y a quelques avantages à étendre WearableListenerService. Tout d'abord, WearableListenerService fait son travail sur un thread d'arrière-plan, vous n'avez donc pas à vous soucier de bloquer le thread principal de l'interface utilisateur. Deuxièmement, le système gère le cycle de vie WearableListenerService pour s’assurer qu’il ne consomme pas de ressources inutiles, en liant et en déliant le service selon les besoins.

L’inconvénient est que WearableListenerService écoutera les événements même lorsque votre application n’est pas en cours d’exécution et lancera votre application si elle détecte un événement pertinent. Si votre application n’a besoin de répondre qu’aux événements en cours, WearableListenerService peut vider inutilement la batterie de l’appareil.

2. Remplacer les rappels de données pertinents

WearableListenerService peut écouter une série d’événements de couche de données. Vous devez donc remplacer les méthodes de rappel des événements de données pour les événements qui vous intéressent. Dans notre service, j'implémente onMessageReceived, qui sera déclenché lorsqu'un message est envoyé depuis le nœud distant.

3. Vérifiez le chemin

Chaque fois qu'un message est envoyé à la couche de données, notre application doit vérifier si l'identifiant my_path est correct.

4. Diffuser des messages vers MainActivity

WearableListenerService s'exécutant sur un thread différent, il ne peut pas mettre à jour l'interface utilisateur directement. Pour afficher un message dans notre application, nous devons le transférer vers MainActivity à l'aide d'un gestionnaire LocalBroadcastManager.

Pour créer le service:

  • Assurez-vous que le module mobile est sélectionné.
  • Sélectionnez New > Service dans la barre d'outils Android Studio.
  • Nommez ce service MessageService.
  • Ajoutez ce qui suit:

Enfin, ouvrez le Manifest et ajoutez des informations à l’entrée MessageService:

Comme nous l’avons déjà mentionné, le système considère uniquement un message envoyé avec succès une fois qu’il a été mis en file d’attente, ce qui ne peut se produire que si un ou plusieurs périphériques portables sont disponibles.

Vous pouvez le constater en installant le module mobile sur un smartphone ou une tablette compatible, ou sur un périphérique virtuel Android (AVD). Cliquez sur le bouton Talk to the Wearable et l'application affichera le texte Sending messageseulement. Le texte I just sent the wearable… ne fera pas son apparition.

Si notre message est en attente de remise, nous devons implémenter un autre ensemble de composants émetteur et récepteur dans le module portable de notre projet.

Créer votre application portable

Notre application portable aura des fonctionnalités similaires à celles de son homologue de poche, donc je vais ignorer tout le code que nous avons déjà traité.

Une fois encore, commençons par créer l’interface utilisateur de l’application. Ouvrez le fichier activity_main.xml du module wear et ajoutez les éléments suivants:

À ce stade, votre interface utilisateur devrait ressembler à ceci:

Create the UI for your Android projects Wear OS module

Ouvrez votre build.gradle et ajoutez les dépendances suivantes:

Maintenant, nous devons envoyer notre message à la couche de données:

Ensuite, nous devons créer un écouteur qui surveillera la couche de données pour les messages entrants et notifiera MainActivity chaque fois qu'un nouveau message sera reçu:

  • Assurez-vous que le module wear est sélectionné.
  • Choisissez New > Service dans la barre d'outils Android Studio.
  • Nommez ce service MessageService, puis ajoutez les éléments suivants:

Ouvrez le Manifest du module et créez un filtre d'intention pour WearableListenerService:

Vous pouvez télécharger le projet complet à partir de GitHub.

Tester votre application

À ce stade, vous disposez de deux applications pouvant échanger des messages sur la couche de données, mais si vous souhaitez tester ces compétences de communication, vous devez installer votre projet sur un ordinateur de poche et sur un périphérique portable.

Si vous êtes un développeur Android, il y a de fortes chances que vous disposiez d'au moins un smartphone ou une tablette Android, mais les appareils portables restent un produit relativement nouveau et spécialisé. Vous n'avez donc peut-être pas encore investi.

Si vous décidez de poursuivre le développement de Wear OS, vous devriez franchir le pas et acheter une smartwatch à un moment donné, car rien ne remplace le test de votre application sur un vrai appareil Android. Cependant, si vous ne faites qu'expérimenter Wear OS, vous pouvez créer un AVD qui émule un portable, de la même manière que vous créez un AVD qui émule un smartphone ou une tablette. Vous pouvez ensuite faire parler votre AVD et votre appareil Android physique, en utilisant le transfert de port.

La première étape consiste à créer un AVD portable et à installer votre module wear sur ce périphérique émulé:

  • Sélectionnez Tools > Android > AVD Manager dans la barre d'outils Android Studio.
  • Cliquez sur Create Virtual Device
  • Sélectionnez Wear dans le menu de gauche.
  • Choisissez le portable que vous souhaitez émuler, puis cliquez sur Next.
  • Sélectionnez votre image système, puis cliquez sur Next.
  • Donnez un nom à votre AVD, puis cliquez sur Finish.
  • Sélectionnez Run > Run… dans la barre d'outils Android Studio.
  • Dans la petite fenêtre qui apparaît, sélectionnez Wear
  • Sélectionnez le fichier AVD portable que vous venez de créer. Après quelques instants, l'AVD se lancera avec votre composant portable déjà installé.

Ensuite, installez le module de poche sur votre smartphone ou tablette:

  • Connectez votre appareil Android physique à votre machine de développement.
  • Sélectionnez Run > Run… dans la barre d'outils Android Studio.
  • Choisissez mobile lorsque vous y êtes invité.

Enfin, nous devons obtenir notre appareil Android physique et notre AVD parlant:

  • Assurez-vous que Bluetooth est activé sur votre ordinateur de poche (Settings > Bluetooth) et qu'il est connecté à votre ordinateur de développement via un câble USB.
  • Sur votre ordinateur de poche, ouvrez le Play Store et téléchargez l'application Wear OS by Google (anciennement Android Wear).
  • Lancez l'application Wear OS.
  • Sur votre portable émulé, cliquez sur le bouton Home dans la bande de boutons ci-jointe (où le curseur est positionné dans la capture d'écran suivante), puis ouvrez l'application Settings .

Testing your project by connecting your emulator and your Android smartphone or tablet

  • Sélectionnez System>About et cliquez plusieurs fois sur le Build number jusqu'à ce qu'un message You are now a developer s'affiche.
  • Revenez au menu principal Settings en cliquant deux fois sur le bouton Back. Vous devriez remarquer un nouvel élément Developer Options; faites un clic.
  • Sélectionnez ADB Debugging.
  • Sur votre ordinateur de développement, ouvrez une nouvelle invite de commande (Windows) ou un nouveau terminal (Mac), puis modifiez le répertoire (cd) pour qu'il pointe vers le dossier des outils de plate-forme du SDK Android. Par exemple, ma commande ressemble à ceci:
  • Assurez-vous que ADB (Android Debug Bridge) reconnaît l’émulateur et votre smartphone ou votre tablette en exécutant la commande /.adb devices. Il devrait renvoyer les codes pour deux appareils distincts.
  • Transférez le port de communication de votre AVD au smartphone ou à la tablette connecté (e) en exécutant la commande suivante dans la fenêtre Terminal / Invite de commandes:
  • Sur votre ordinateur de poche, lancez l'application Wear OS. Naviguez à travers les dialogues d'introduction jusqu'à atteindre l'écran principal de Wear OS.
  • Ouvrez le menu déroulant dans le coin supérieur gauche et sélectionnez Add a new watch.
  • Appuyez sur l'icône en pointillés dans le coin supérieur droit et sélectionnez Pair with emulator. Après quelques instants, le terminal mobile doit se connecter à votre émulateur.
Use the Wear OS app to pair your emulator with your Android smartphone or tablet

Vous êtes maintenant prêt à tester votre application! Lancez le composant Wear sur votre émulateur et le composant mobile sur votre ordinateur de poche, puis testez les différents boutons Talk ....

Lorsque vous appuyez sur Talk to the wearable sur le terminal, les messages suivants doivent apparaître:

  • Handheld: “I just sent the handheld a message."
  • Wearable: “I just received a message from the handheld.”
You can now exchange messages over the Data Layer using the MessageClient API

Lorsque vous appuyez sur Talk to the handheld sur le portable, les messages suivants doivent apparaître:

  • Wearable: “I just sent the handheld a message."
  • Handheld: ‘I just received a message from the wearable.”

Conclusion

Dans cet article, nous avons examiné comment échanger des messages entre votre ordinateur de poche et votre application portable, via la couche de données portable.

En production, vous utiliserez probablement cette technique pour faire quelque chose de plus intéressant que simplement échanger les mêmes lignes de texte! Par exemple, si vous développez une application qui lit de la musique sur le smartphone de l'utilisateur, vous pouvez lui donner la possibilité de lire, mettre en pause et ignorer des morceaux directement à partir de son portable sur la couche de données. .

Vous pouvez en apprendre plus sur la couche de données portable, y compris sur la façon de synchroniser des données plus complexes, sur les documents Android officiels.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.