Vidéo: BANG : la nouvelle billettique pour les usagers de l'Agglo 2025
Android conduit de nombreux projets innovants de Google. Prenons, par exemple, la tablette appelée Project Tango. À première vue, un appareil Project Tango ressemble à une tablette ordinaire de sept pouces. Lorsque vous allumez l'appareil, vous voyez l'écran d'accueil Android familier avec des icônes pour lancer des applications, et avec des indicateurs pour le signal WiFi et la puissance de la batterie.
L'appareil exécute même l'application Play Store de Google. Vous pouvez ainsi l'utiliser pour naviguer sur le Web, modifier des documents et effectuer toutes les autres tâches des tablettes ordinaires.
Mais le matériel de Project Tango n'est pas ordinaire. L'arrière de la tablette a un capteur de profondeur, une caméra fish eye, et une caméra IR. En combinant les données de ces sources avec son matériel de suivi de mouvement interne, Project Tango crée une carte 3D de l'espace environnant.
Vous pouvez créer une carte de votre salon et stocker la carte sur un appareil Project Tango. Lorsque vous rapportez l'appareil à votre salon, l'appareil se souvient de l'espace et de tous les objets à l'intérieur de l'espace.
Tango est livré avec quelques applications de démonstration. Avec une application, vous visez l'appareil à deux points pour mesurer la distance entre ces points. Vous pouvez vous tenir à plusieurs pieds des points de départ et de fin car l'appareil sait à quelle distance vous vous trouvez de chacun des points.
Avec une autre application, vous parcourez les mondes virtuels. Pour changer votre point de vue dans un monde, vous ne devez pas tordre un joystick, déplacer une souris ou faire glisser vos doigts le long d'un écran. Au lieu de cela, vous regardez l'écran de l'appareil lorsque vous vous déplacez dans votre propre environnement réel. L'appareil vous montre ce que vous verriez dans le monde virtuel au fur et à mesure que vous avancez, vous vous penchez sur le côté et vous vous déplacez autour des objets 3D virtuels.
Pour vous lancer dans le développement, Project Tango est livré avec des exemples d'applications. L'ouverture de l'application QuickStart très basique dans Android Studio affiche les valeurs de translation et de rotation lorsque vous déplacez l'appareil d'un endroit à l'autre. (Voir la figure suivante.)
Au cœur de l'application QuickStart se trouve une activité Android. Une partie du code de l'application apparaît ci-dessous.
/ * * Copyright 2014 Google Inc. Tous droits réservés. * * Sous licence Apache, Version 2. 0 (la "Licence"); * vous ne pouvez pas utiliser ce fichier sauf en conformité avec la licence. * Vous pouvez obtenir une copie de la licence au * * // www. apache. org / licences / LICENCE-2. 0 * * Sauf si requis par la loi applicable ou accepté par écrit, le logiciel * distribué sous la licence est distribué «TEL QUEL», * SANS GARANTIE OU CONDITION DE QUELQUE SORTE, expresse ou implicite.* Voir la Licence pour la langue spécifique régissant les permissions et * limitations sous la Licence. * / import com Google. un robinet. tangoservice. Tango; import com. Google. un robinet. tangoservice. Tango. OnTangoUpdateListener; import com. Google. un robinet. tangoservice. TangoConfig; import com. Google. un robinet. tangoservice. TangoCoordinateFramePair; import com. Google. un robinet. tangoservice. TangoPoseData; // Il y a plus de déclarations d'import ici public class MainActivity extends Activité {@Overide protected void onCreate (Regrouper savedInstanceState) {super. onCreate (savedInstanceState); setContentView (disposition R., activité_main); mTranslationTextView = (TextView) findViewById (id de R. translation_text_view); mRotationTextView = (TextView) findViewById (id de R. rotation_text_view); // Instancie le client Tango mTango = new Tango (this); // Configurer la configuration Tango pour le suivi de mouvement mConfig = mTango. getConfig (TangoConfig CONFIG_TYPE_CURRENT); mConfig. putBoolean (TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true);} @Oublide protégé void onActivityResult (int requestCode, int résultatCode, données Intent) {try {setTangoListeners ();} catch (TangoErrorException e) {} try {mTango. connect (mConfig);} catch (TangoOutOfDateException e) {} catch (TangoErrorException e) {}} void privé setTangoListeners () {// Sélectionner les paires de trames de coordonnées ArrayList framePairs = new ArrayList (); framePairs. ajouter (nouveau TangoCoordinateFramePair (TangoPoseData, COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData, COORDINATE_FRAME_DEVICE)); // Ajoute un écouteur pour Tango pose des données mTango. connectListener (framePairs, nouveau OnTangoUpdateListener () { @Override public void onPoseAvailable (pose TangoPoseData) { // Données de traduction et de rotation du format final String TranslationMsg = String. format (sTranslationFormat, pose. translation [0], pose [1], pose. translation [2]); final Chaîne rotationMsg = Chaîne. format (sRotationFormat, pose.rotation [0], pose.rotation [1], pose.rotation [2], rotation [3]); // Afficher les données dans TextViews runOnUiThread (new Runnable () { @Override public void run () { mTranslationTextView.setText (translationMsg); mRotationTextView setText (rotationMsg); } } ); } } );}}
Ce que vous voyez ici n'est pas la MainActivity de 210 lignes classe, mais quelques-uns des faits saillants importants de la classe ont été résumés.
Jetez un coup d'œil à la classe MainActivity. Le cœur du code de l'activité se trouve dans la classe anonyme OnTangoUpdateListener avec sa méthode onPoseAvailable.
Dans la vie quotidienne, une pose est la façon dont vous orientez votre tête par rapport à votre environnement. Et dans la terminologie du projet Tango, une pose est la façon dont vous orientez l'appareil par rapport à son environnement. Une pose est décrite par sept nombres, comme les numéros de translation et de rotation que vous voyez dans la figure précédente.
Lorsque le matériel de l'appareil détecte une nouvelle pose, le logiciel appelle la méthode onPoseAvailable. La méthode onPoseAvailable doit afficher des messages tels que Translation: -2.6622, 3. 214773, 2. 824979 dans les champs de texte de l'activité.
Mais il y a un problème. Les règles de threads d'Android dictent qu'aucun thread autre que le thread principal ne peut mettre à jour l'interface utilisateur d'une application. Dans la classe MainActivity, l'instance OnTangoUpdateListener s'exécute dans un thread qui lui est propre. La méthode onPoseAvailable de l'instance ne peut donc pas afficher les messages dans les champs de texte de l'activité en appelant directement mTranslationTextView. setText et mRotationTextView. Méthodes setText
Mais comme le dit toujours le professeur Farnsworth dans Futurama , il y a «Bonne nouvelle, tout le monde! "Android a une méthode runOnUiThread pour de telles occasions. Le paramètre de la méthode runOnUiThread est une classe qui implémente l'interface Runnable de Java. Dans le code de l'application QuickStart, la méthode d'exécution de cette classe affiche du texte pour le compte de l'instance OnTangoUpdateListener. À la fin, l'utilisateur de l'appareil voit les données de traduction et de rotation, et tout va bien.
