Die Entwicklung für das Projekt Tango

Android treibt viele von innovativen Projekten von Google. Nehmen wir zum Beispiel das Tablet-Gerät als Project Tango bekannt. Auf den ersten Blick sieht ein Projekt Tango-Gerät wie ein gewöhnlicher sieben-Zoll-Tablet. Wenn Sie das Gerät einschalten, sehen Sie das bekannte Android-Startbildschirm mit Icons für den Start-Anwendungen, und mit Indikatoren für WiFi-Signal und Stärke Batterie.

Das Gerät läuft auch Googles Play Store App, so dass Sie es verwenden, können das Web, Dokumente bearbeiten zu durchsuchen, und tun all die anderen Dinge, die gewöhnliche Tablet-Geräte tun.

Aber Projekt Tango-Hardware ist nicht alltäglich. Die Rückseite der Tablette hat einen Tiefensensor, ein Fischaugenkamera und eine IR-Kamera. Die Kombination von Daten aus diesen Quellen mit ihren internen Motion-Tracking-Hardware, schafft Projekt Tango eine 3D-Karte des umgebenden Raumes.

Sie können eine Karte von Ihrem eigenen Wohnzimmer machen und speichern Sie die Karte auf einem Projekt Tango-Gerät. Wenn Sie das Gerät wieder in Ihr Wohnzimmer bringen, erinnert sich das Gerät den Raum und alle Objekte im Inneren des Raumes.

Tango kommt mit ein paar Demo-Anwendungen. Mit einer App wollen Sie das Gerät an zwei Punkten den Abstand zwischen diesen Punkten zu messen. Sie können mehrere Meter von der Start- und Endpunkte stehen, da das Gerät weiß, wie weit Sie von jedem der Punkte sind.

Mit einer anderen App, gehen Sie virtuelle Welten durch. Um Ihrer Sicht in einer Welt zu ändern, Sie nicht verdrehen einen Joystick, eine Maus verschieben, oder ziehen Sie Ihre Finger entlang einem Bildschirm. Stattdessen sehen Sie den Bildschirm des Geräts, wie Sie um Ihre eigenen realen Umfeld bewegen. Das Gerät zeigt Ihnen, was Sie in der virtuellen Welt sehen würde, wie Sie vorwärts gehen, drehen seitwärts zu suchen, und navigieren Sie Ihren Weg durch virtuelle 3D-Objekte.

Um Ihnen den Einstieg Entwicklung tun, kommt Projekt Tango mit einigen Beispielanwendungen. Das Öffnen der sehr einfachen Quick App in Android Studio zeigt Translation und Rotation Werte, wie Sie das Gerät von einem Ort zum anderen zu bewegen. (Siehe folgende Abbildung.)

Die Quickstart-App.
Die Quickstart-App.

Im Kern der Quickstart-App ist ein Android Aktivität. Einige der Code der App erscheint unten.

/ ** Urheberrecht 2014 Google Inc. Alle Rechte vorbehalten ** unter der Lizenz Apache-Lizenz, Version 2.0 (die "Lizenz") - *. Sie diese Datei möglicherweise nicht mit der Lizenz nur unter Einhaltung verwenden * Sie können eine Kopie erhalten. die Lizenz ** https://apache.org/licenses/LICENSE-2.0**, wenn nicht ausdrücklich * schriftlich, Software unter dieser Lizenz durch das anwendbare Recht oder vereinbart sein muss, auf einer verteilten "AS IS" BASIS, * OHNE GARANTIEN oDER BEDINGUNGEN iRGENDEINER ART, weder ausdrücklich noch konkludent. * sehen Sie sich die Lizenz für die jeweilige Sprache relevanten Rechten und * Einschränkungen im Rahmen der Lizenz. * / import com.google.atap.tangoservice.Tango-import com.google.atap.tangoservice. Tango.OnTangoUpdateListener-Import com.google.atap.tangoservice.TangoConfig-Import com.google.atap.tangoservice.TangoCoordinateFramePair-import com.google.atap.tangoservice.TangoPoseData - // Es gibt mehr Einfuhranmeldungen herepublic Klasse MainActivity erstreckt Aktivität { @Overrideprotected Leere onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView (R.layout.activity_main) -mTranslationTextView = (Textview) findViewById (R.id.translation_text_view) -mRotationTextView = (Textview) findViewById (R.id. rotation_text_view) - // Instantiate Tango clientmTango = new Tango (this) - // einrichten Tango-Konfiguration für Bewegung trackingmConfig = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT)-mConfig.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true) -} @ Overrideprotected Leere onActivityResult (int requestCode, int Result, Intent-Daten) {try {setTangoListeners () -} catch (TangoErrorException e) {} try {mTango.connect (mConfig) -} catch (TangoOutOfDateException e) {} catch (TangoErrorException e) {}} private void setTangoListeners () {// auswählen Rahmen pairsArrayList koordinieren framePairs = new Arraylist() -framePairs.add (Neu TangoCoordinateFramePair(TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,TangoPoseData.COORDINATE_FRAME_DEVICE))-// Fügen Sie einen Listener für Tango Pose datamTango.connectListener (framePairs, neue OnTangoUpdateListener () {@Overridepublic void onPoseAvailable (TangoPoseData Pose) {// Format Translation und Rotation datafinal String translationMsg = String.format (sTranslationFormat, pose.translation [0], pose.translation [1], pose.translation [2]) - final String rotationMsg = String.format (sRotationFormat, darstellen. Rotation [0], pose.rotation [1], pose.rotation [2], pose.rotation [3]) - // anzeigen von Daten in TextViewsrunOnUiThread (neue Runnable () {@Overridepublic void run () {mTranslationTextView.setText (translationMsg) -mRotationTextView.setText (rotationMsg) -}}) -} }) -}}

Was Sie hier sehen, ist nicht die gesamte 210-line Hauptaktivität Klasse, aber einige der wichtigsten Highlights der Klasse haben zusammengefasst.

Werfen Sie einen Blick auf die Hauptaktivität Klasse. Das Herz des Codes des Aktivität ist in der anonymen OnTangoUpdateListener Klasse mit ihren onPoseAvailable Verfahren.

Im Alltag ein Pose ist die Art und Weise Sie Ihren Kopf orientieren im Vergleich zu Ihrer Umgebung. Und im Projekt Tango Terminologie, ein Pose ist die Art und Weise Sie das Gerät relativ zu seiner Umgebung orientieren. Eine Pose wird von sieben Zahlen beschrieben, wie die Translation und Rotation Zahlen, die Sie in der vorhergehenden Figur zu sehen.

Wenn die Hardware des Gerätes eine neue Pose erkennt, ruft die Software die onPoseAvailable Verfahren. Das onPoseAvailable Verfahren um Nachrichten anzuzeigen, wie Übersetzung: -2,6622, 3,214773, 2,824979 in die Textfelder Aktivitäten.

Aber es gibt ein Problem. Android Threading Regeln diktieren, dass keine anderen Thread als dem Hauptthread eines Benutzeroberfläche der Anwendung zu aktualisieren. In dem Hauptaktivität Klasse, die OnTangoUpdateListener Beispiel läuft in einem Thread alle seine eigenen. So ist die Instanz onPoseAvailable Verfahren können keine Nachrichten in den Textfeldern der Aktivität angezeigt werden direkt durch den Aufruf der mTranslationTextView.setText und mRotationTextView.setText Methoden.

Aber wie Professor Farnsworth in Futurama sagt immer, es gibt # 147-gute Nachricht, jeder! # 148- Android hat ein runOnUiThread Verfahren für einen solchen Gelegenheiten. Das runOnUiThread Methode der Parameter ist eine Klasse, die Java implementiert Runnable Schnittstelle. In den Code des Quickstart-Anwendung, dieser Lauf-Methode der Klasse zeigt Text im Namen der OnTangoUpdateListener Beispiel. Am Ende sieht das Gerät des Benutzers die Translation und Rotation Daten, und alles ist gut.

Menü