Desenvolvendo para o Projeto Tango
unidades Android muitos de projetos inovadores do Google. Tomemos, por exemplo, o dispositivo tablet conhecido como Projeto Tango. À primeira vista, um dispositivo de Projeto Tango parece um tablet comum de sete polegadas. Quando você liga o dispositivo, você verá a tela familiarizado Início Android com ícones para aplicativos de lançamento, e com indicadores de sinal Wi-Fi e de potência da bateria.
O dispositivo funciona mesmo aplicativo Play Store da Google, assim você pode usá-lo para navegar na web, editar documentos, e fazer todas as outras coisas que tablets comuns fazem.
Mas o hardware do Projeto Tango não é comum. A parte traseira do tablet tem um sensor de profundidade, uma câmera olho de peixe, e uma câmera de IR. Combinando os dados provenientes dessas fontes com seu hardware de rastreamento de movimento interno, o Projeto Tango cria um mapa 3D do espaço circundante.
Você pode fazer um mapa de sua própria sala de estar e armazenar o mapa em um dispositivo Projeto Tango. Quando você traz o dispositivo de volta para sua sala de estar, o dispositivo lembra o espaço e todos os objetos dentro do espaço.
Tango vem com alguns aplicativos de demonstração. Com um aplicativo, você apontar o dispositivo em dois pontos para medir a distância entre esses pontos. Você pode ficar vários pés a partir dos pontos inicial e final porque o dispositivo sabe como você está longe de cada um dos pontos.
Com outro aplicativo, você anda através de mundos virtuais. Para alterar o seu ponto de vista em um mundo, você não torcer um joystick, mova o mouse ou arrastar os dedos ao longo de uma tela. Em vez disso, você vê a tela do dispositivo enquanto você se move em torno de seu próprio ambiente de vida real. O dispositivo mostra o que você veria no mundo virtual como você anda para a frente, voltar-se para olhar para os lados, e navegar no seu caminho em torno de objetos virtuais 3D.
Para você começar fazendo o desenvolvimento, o Projeto Tango vem com alguns aplicativos de exemplo. Abrir o aplicativo QuickStart muito básico em exibe os valores de translação e rotação Android estúdio como você mover o dispositivo a partir de um lugar para outro. (Veja a figura a seguir.)
No núcleo do aplicativo QuickStart é um Android Atividade. Alguns de código do aplicativo aparece abaixo.
/ ** De Copyright 2014 Google Inc. Todos os direitos reservados ** Licenciado sob a Licença Apache, Versão 2.0 (a "Licença") -. * Você não pode usar este arquivo, exceto em conformidade com a Licença * Você pode obter uma cópia do. Licença em ** https://apache.org/licenses/LICENSE-2.0** menos que exigido por lei aplicável ou acordado por escrito, o software * distribuído sob a Licença é distribuído "COMO eSTÁ", SEM GARANTIAS * oU CONDIÇÕES dE qUALQUER TIPO, sejam expressas ou implícitas. * Consulte a licença para as permissões específicas que regem a linguagem e * limitações sob a Licença. * / 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 - // Há mais declarações de importação classe herepublic MainActivity estende Atividade { @Overrideprotected onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState) -setContentView void (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) - // Defina a configuração do Tango para o movimento trackingmConfig = mTango.getConfig(TangoConfig.CONFIG_TYPE_CURRENT)-mConfig.putBoolean(TangoConfig.KEY_BOOLEAN_MOTIONTRACKING, true) -} @ onActivityResult Overrideprotected void (int requestCode, resultCode int, os dados intenção) {try {setTangoListeners () -} catch (TangoErrorException e) {} try {mTango.connect (mconfig) -} catch (TangoOutOfDateException e) {} catch (TangoErrorException e) {}} setTangoListeners private void () {// Selecione coordenar quadro pairsArrayListframePairs = new ArrayList () -framePairs.add (Nova TangoCoordinateFramePair(TangoPoseData.COORDINATE_FRAME_START_OF_SERVICE,TangoPoseData.COORDINATE_FRAME_DEVICE))-// Adicionar um ouvinte para Tango representar datamTango.connectListener (framePairs, nova OnTangoUpdateListener () {@Sobreporpublic void onPoseAvailable (TangoPoseData representar) {// Formato de tradução e rotação da coluna datafinal translationMsg = String.format (sTranslationFormat, pose.translation [0], pose.translation [1], pose.translation [2]) - final String rotationMsg = String.format (sRotationFormat, pose. rotação [0], pose.rotation [1], pose.rotation [2], pose.rotation [3]) - // dados de exibição no TextViewsrunOnUiThread (nova Runnable () {@Sobreporpublic void run () {mTranslationTextView.setText (translationMsg) -mRotationTextView.setText (rotationMsg) -}}) -} }) -}}
O que você vê aqui não é a toda 210-line Atividade principal classe, mas alguns dos destaques importantes da classe foram resumidos.
Ter um olhar para o Atividade principal classe. O coração do código da atividade está dentro do anonymous OnTangoUpdateListener classe com a sua onPoseAvailable método.
Na vida cotidiana, um pose é a maneira como você orientar sua cabeça em comparação com o seu entorno. E na terminologia Projeto Tango, um pose é a maneira de orientar o dispositivo em relação ao seu entorno. A pose é descrito por sete números, como os números de translação e rotação que você vê na figura anterior.
Quando o hardware do dispositivo detecta um novo pose, o software chama o onPoseAvailable método. o onPoseAvailable método deve exibir mensagens como Tradução: -2,6622, 3,214773, 2,824979 em campos de texto da atividade.
Mas há um problema. regras de segmentação do Android ditam que nenhum thread diferente do thread principal pode atualizar a interface de uma aplicação. No Atividade principal classe, o OnTangoUpdateListener exemplo, é executado em um segmento próprio. Assim, o exemplo é onPoseAvailable método não pode exibir mensagens em campos de texto da atividade chamando diretamente o mTranslationTextView.setText e mRotationTextView.setText métodos.
Mas, como Professor Farnsworth em Futurama sempre diz, não há Nº 147-A boa notícia, todos! # 148- Android tem um runOnUiThread método para apenas tais ocasiões. o runOnUiThread parâmetro do método é uma classe que implementa Java de Runnable interface. No código do QuickStart aplicativo, método de execução deste classe exibe o texto em nome do OnTangoUpdateListener instância. No final, usuário do dispositivo vê os dados de translação e rotação, e está tudo bem.