Développer pour le tango de projet

Lecteurs Android de nombreux de projets innovants de Google. Prenez, par exemple, la tablette connue sous le nom Project Tango. À première vue, un dispositif du projet Tango ressemble à un comprimé ordinaire de sept pouces. Lorsque vous allumez l'appareil, vous voyez l'écran d'accueil d'Android familiariser avec des icônes pour les applications de lancement, et avec des indicateurs pour le signal WiFi et force de la batterie.

L'appareil fonctionne même Play Store app de Google, de sorte que vous pouvez l'utiliser pour naviguer sur le Web, d'éditer des documents, et de faire toutes les autres choses que les tablettes ordinaires font.

Mais le matériel de projet Tango est pas ordinaire. L'arrière de la tablette comporte un capteur de profondeur, une caméra oeil de poisson, et une caméra infrarouge. En combinant les données provenant 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 faire une carte de votre propre salle de séjour et de stocker la carte sur un appareil Tango Project. Quand vous apportez l'appareil à votre salon, le dispositif 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 seule application, vous visez le dispositif en 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 comment tu es loin de chacun des points.




Avec une autre application, vous marchez à travers les mondes virtuels. Pour changer votre point de vue dans un monde, vous ne tournez un joystick, déplacez la souris, ou faites glisser vos doigts le long d'un écran. Au lieu de cela, vous regardez l'écran de l'appareil que vous vous déplacez autour de votre propre environnement de la vie réelle. L'appareil vous montre ce que vous verriez dans le monde virtuel que vous avancez, tournez à regarder de côté, et de naviguer votre chemin autour des objets 3D virtuels.

Pour vous aider à démarrer faire du développement, Project Tango est livré avec quelques exemples d'applications. Ouverture de l'application QuickStart très basique dans Android Studio affiche translation et de rotation des valeurs que vous déplacez l'appareil d'un endroit à. (Voir la figure ci-dessous.)

L'application QuickStart.
L'application QuickStart.

Au cœur de l'application QuickStart est un Android Activité. Certains de code de l'application apparaît ci-dessous.

/ ** Droit d'auteur 2014 Google Inc. Tous droits réservés ** sous licence Apache License, 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 http://apache.org/licenses/LICENSE-2.0** ** Sauf si la loi en vigueur ou accord écrit, le logiciel * distribué sous licence est distribué «TEL QUEL», SANS GARANTIE * OU CONDITIONS D'AUCUNE SORTE, expresse ou implicite. * Voir la licence pour les autorisations spécifiques de gouvernance de la langue et de limitations * sous la licence. * / import-import com.google.atap.tangoservice com.google.atap.tangoservice.Tango. Tango.OnTangoUpdateListener-import-import com.google.atap.tangoservice.TangoCoordinateFramePair com.google.atap.tangoservice.TangoConfig-import com.google.atap.tangoservice.TangoPoseData - // Il ya plus de déclarations d'importation MainActivity classe herepublic étend Activité { vide onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentViewOverrideprotected (R.layout.activity_main) -mTranslationTextView = (TextView) findViewById (R.id.translation_text_view) -mRotationTextView = (TextView) findViewById (R.id. rotation_text_view) - // Instancier Tango clientmTango = new Tango (cette) - // définir la configuration Tango pour un mouvement trackingmConfig = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT)-mConfig.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true) -} @ onActivityResult Overrideprotected (int requestCode, int resultCode, les données d'intention) {try {setTangoListeners () -} catch (TangoErrorException e) {} try {mTango.connect (mconfig) -} catch (TangoOutOfDateException e) {} catch (e TangoErrorException) {}} setTangoListeners private void () {// Sélection coordonner cadre pairsArrayList framePairs = new ArrayList() -framePairs.add (nouvelle TangoCoordinateFramePair(TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,TangoPoseData.COORDINATE_FRAME_DEVICE))-// Ajouter un écouteur pour Tango pose datamTango.connectListener (framePairs, nouvelle OnTangoUpdateListener () {Overridepublic void onPoseAvailable (TangoPoseData pose) {// Format translation et de rotation cordes datafinal translationMsg = String.format (de sTranslationFormat, pose.translation [0], pose.translation [1], pose.translation [2]) - final String = rotationMsg String.format (sRotationFormat, pose. rotation [0], pose.rotation [1], pose.rotation [2], pose.rotation [3]) - // données d'affichage dans TextViewsrunOnUiThread (nouvelle Runnable () {Overridepublic void run () {mTranslationTextView.setText (translationMsg) -mRotationTextView.setText (rotationMsg) -}}) -} }) -}}

Ce que vous voyez ici est pas la totalité de la ligne 210- Activité principale classe, mais certains des faits saillants importants de la classe ont été résumées.

Jetez un oeil à la Activité principale classe. Le coeur du code de l'activité est à l'intérieur du anonyme OnTangoUpdateListener classe avec son onPoseAvailable Procédé.

Dans la vie quotidienne, un poser est la façon dont vous orientez votre tête par rapport à votre environnement. Et dans la terminologie du projet Tango, un poser est la façon dont vous orientez l'appareil par rapport à son environnement. Une pose est décrit par sept numéros, 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 onPoseAvailable Procédé. La onPoseAvailable méthode doit afficher des messages comme Traduction: -2,6622, 3,214773, 2,824979 dans les champs de texte de l'activité.

Mais il ya un problème. Les règles de filetage de Android dictent qu'aucun autre thread que le thread principal peut mettre à jour l'interface utilisateur d'une application. Dans le Activité principale classe, le OnTangoUpdateListener instance est exécutée dans un thread qui lui est propre. Donc, l'instance est onPoseAvailable méthode ne peut pas afficher les messages dans les champs de texte de l'activité en appelant directement le mTranslationTextView.setText et mRotationTextView.setText méthodes.

Mais comme le professeur Farnsworth Futurama dit toujours, il ya “ bonnes nouvelles, tout le monde ”!; Android a un runOnUiThread méthode pour seulement ces occasions. La runOnUiThread le paramètre de procédé est une classe Java qui implémente de Runnable interface. Dans le code de l'application QuickStart, la méthode d'exécution de cette classe affiche du texte au nom de la OnTangoUpdateListener par exemple. En fin de compte, l'utilisateur de l'appareil voit les données de translation et de rotation, et tout va bien.