El desarrollo por el tango proyecto
Unidades Android muchos de los proyectos innovadores de Google. Tomemos, por ejemplo, el dispositivo de tableta conocida como Proyecto Tango. A primera vista, un dispositivo Proyecto Tango parece una tableta ordinaria de siete pulgadas. Al encender el dispositivo, vea la pantalla de inicio de Android familiarizado con iconos para aplicaciones de puesta a flote, y con indicadores de señal WiFi y la fuerza de la batería.
El dispositivo aún corre aplicación Play Store de Google, así que usted puede utilizar para navegar por Internet, editar documentos, y hacer todas las otras cosas que los dispositivos de tableta ordinarios hacen.
Pero el hardware del Proyecto Tango no es ordinario. La parte posterior de la tableta tiene un sensor de profundidad, una cámara de ojo de pez, y una cámara de infrarrojos. Combinando los datos de estas fuentes con el hardware de seguimiento de movimiento interno, Proyecto Tango crea un mapa en 3D del espacio circundante.
Usted puede hacer un mapa de su propia sala de estar y guardar el mapa en un dispositivo Proyecto Tango. Al llevar el dispositivo a su sala de estar, el dispositivo recuerda el espacio y todos los objetos dentro del espacio.
Tango viene con algunas aplicaciones de demostración. Con una sola aplicación, usted apunta el dispositivo en dos puntos para medir la distancia entre esos puntos. Puedes estar varios pies de distancia de los puntos de partida y final ya que el dispositivo sabe lo lejos que están de cada uno de los puntos.
Con otra aplicación, se puede caminar a través de mundos virtuales. Para cambiar su punto de vista en un mundo, no te tuerces un joystick, mueva el ratón o arrastra los dedos a lo largo de una pantalla. En su lugar, usted mira la pantalla del dispositivo mientras se mueve alrededor de su propio entorno de la vida real. El dispositivo le muestra lo que te gustaría ver en el mundo virtual como usted camina hacia adelante, girar a mirar hacia los lados, y navegar su camino alrededor de los objetos virtuales en 3D.
Para empezar hacer el desarrollo, el Proyecto Tango viene con algunas aplicaciones de muestra. Al abrir la aplicación QuickStart muy básico en los valores de las pantallas de traslación y rotación Android Studio como se mueve el dispositivo de lugar en lugar. (Véase la figura siguiente.)
En el núcleo de la aplicación de inicio rápido es un Android Actividad. Algunos de código de la aplicación aparece a continuación.
/ ** Derechos de Autor 2014 Google Inc. Todos los derechos reservados ** Con licencia bajo la Licencia Apache, Versión 2.0 (la "Licencia") -. * No se puede utilizar este archivo excepto en el cumplimiento de la licencia * Usted puede obtener una copia de. la Licencia en http://apache.org/licenses/LICENSE-2.0** ** A menos que requerido por la ley aplicable o se acuerde por escrito, el software * distribuido bajo la licencia se distribuye "TAL CUAL", SIN GARANTÍAS * O CONDICIONES DE NINGÚN TIPO, ya sea expresa o implícita. * Consulte la Licencia para los permisos idioma específico que rige y * limitaciones bajo la licencia. * / import com.google.atap.tangoservice com.google.atap.tangoservice.Tango-importación. Tango.OnTangoUpdateListener-importación com.google.atap.tangoservice.TangoConfig-importación com.google.atap.tangoservice.TangoCoordinateFramePair-importación com.google.atap.tangoservice.TangoPoseData - // Hay más declaraciones de importación de clase herepublic MainActivity extiende Actividad { onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView vacíoOverrideprotected (R.layout.activity_main) -mTranslationTextView = (TextView) findViewById (R.id.translation_text_view) -mRotationTextView = (TextView) findViewById (R.id. rotation_text_view) - // Instanciar Tango clientmTango = new Tango (este) - // Establecer la configuración de Tango para el movimiento trackingmConfig = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT)-mConfig.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true) -} @ Overrideprotected onActivityResult void (int requestCode, int resultCode, datos de Intención) {try {setTangoListeners () -} catch (TangoErrorException e) {} try {mTango.connect (mconfig) -} catch (TangoOutOfDateException e) {} capturas (TangoErrorException e) {}} setTangoListeners private void () {// Seleccione coordinar pairsArrayList marcoframePairs = new ArrayList () -framePairs.add (nueva TangoCoordinateFramePair(TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,TangoPoseData.COORDINATE_FRAME_DEVICE))-// Añadir un oyente de Tango pose datamTango.connectListener (framePairs, nueva OnTangoUpdateListener () {@ Overridepublic void onPoseAvailable (TangoPoseData pose) {// Formato traslación y rotación Cadena datafinal translationMsg = String.Format (sTranslationFormat, pose.translation [0], pose.translation [1], pose.translation [2]) - final String rotationMsg = String.Format (sRotationFormat, plantean. rotación [0], pose.rotation [1], pose.rotation [2], pose.rotation [3]) - // Mostrar los datos en TextViewsrunOnUiThread (nueva Ejecutable () {@ Overridepublic void run () {mTranslationTextView.setText (translationMsg) -mRotationTextView.setText (rotationMsg) -}}) -} }) -}}
Lo que se ve aquí no es la totalidad de 210 línea Actividad principal clase, pero algunos de los puntos destacados importantes de la clase se han resumido.
Echa un vistazo a la Actividad principal clase. El corazón del código de la actividad se encuentra dentro de los anónimos OnTangoUpdateListener clase con su onPoseAvailable método.
En la vida cotidiana, un plantear es la forma de orientar la cabeza en comparación con su entorno. Y en la terminología del Proyecto Tango, un plantear es la forma de orientar el dispositivo en relación con su entorno. Una pose es descrito por siete números, como los números de traslación y rotación que se ven en la figura anterior.
Cuando el hardware del dispositivo detecta una nueva pose, el software llama al onPoseAvailable método. los onPoseAvailable método debe mostrar mensajes como Traducción: -2.6622, 3.214773, 2.824979 en los campos de texto de la actividad.
Pero hay un problema. Reglas de roscado de Android dictan que ningún hilo que no sea el hilo principal puede actualizar la interfaz de usuario de una aplicación. en el Actividad principal clase, el OnTangoUpdateListener instancia se ejecuta en un hilo propio. Así que la instancia es onPoseAvailable método no puede mostrar mensajes en los campos de texto de la actividad llamando directamente a la mTranslationTextView.setText y mRotationTextView.setText métodos.
Pero como el Profesor Farnsworth en Futurama Siempre dice, hay " Buenas noticias, todo el mundo "! Android tiene una runOnUiThread método para tales ocasiones. los runOnUiThread parámetro del método es una clase que implementa Java Ejecutable interfaz. En el código de la aplicación de inicio rápido, el método de ejecución de esta clase muestra el texto en nombre de la OnTangoUpdateListener instancia. Al final, el usuario del dispositivo ve los datos de traslación y rotación, y todo está bien.