Видео: Андрей Аржанников - Project Tango - новые возможности мобильной разработки 2024
Android поддерживает многие инновационные проекты Google. Возьмем, к примеру, планшетное устройство, известное как Project Tango. На первый взгляд, устройство Project Tango выглядит как обычный семидюймовый планшет. Когда вы включаете устройство, вы видите знакомый начальный экран Android с иконками для запуска приложений и индикаторами для сигнала Wi-Fi и напряжением батареи.
Устройство даже запускает приложение Play Маркета Google, поэтому вы можете использовать его для просмотра веб-страниц, редактирования документов и выполнения всех других действий, которые делают обычные планшетные устройства.
Но аппаратное обеспечение Project Tango не является обычным явлением. На задней панели планшета есть датчик глубины, камера для глаз с рыбой и ИК-камера. Комбинируя данные из этих источников с его внутренним устройством отслеживания движения, Project Tango создает 3D-карту окружающего пространства.
Вы можете создать карту своей собственной гостиной и сохранить карту на устройстве Project Tango. Когда вы возвращаете устройство в свою гостиную, устройство запоминает пространство и все объекты внутри пространства.
В Tango есть несколько демонстрационных приложений. С одним приложением вы нацеливаете устройство на две точки для измерения расстояния между этими точками. Вы можете стоять в нескольких футах от начальной и конечной точек, потому что устройство знает, насколько далеко вы находитесь от каждой точки.
С другим приложением вы проходите через виртуальные миры. Чтобы изменить свою точку зрения в мире, вы не крутите джойстик, не перемещаете мышь или не тянете пальцы вдоль экрана. Вместо этого вы смотрите экран устройства, когда вы двигаетесь вокруг своей собственной реальной жизни. Устройство показывает вам, что вы увидите в виртуальном мире, когда идете вперед, поворачиваетесь, чтобы смотреть боком и перемещаться по виртуальным 3D-объектам.
Чтобы начать работу над разработкой, Project Tango поставляется с некоторыми примерами приложений. Открытие самого простого приложения QuickStart в Android Studio отображает значения перевода и вращения при перемещении устройства с места на место. (См. Следующий рисунок.)
Приложение QuickStart.В основе приложения QuickStart входит Android-активность. Ниже приведен код приложения.
/ * * Copyright 2014 Google Inc. Все права защищены. * * Лицензия на лицензию Apache, версия 2. 0 («Лицензия»); * вы не можете использовать этот файл, кроме как в соответствии с Лицензией. * Вы можете получить копию Лицензии на * * // www. апач. орг / лицензии / ЛИЦЕНЗИИ-2. 0 * * Если это не предусмотрено действующим законодательством или не согласовано в письменной форме, программное обеспечение *, распространяемое по лицензии, распространяется на основе «КАК ЕСТЬ», * БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ ИЛИ УСЛОВИЙ ЛЮБОГО ВИДА, явных или подразумеваемых.* См. Лицензию на конкретный язык, регулирующий разрешения и * ограничения по Лицензии. * / импорт com. Google. кран. tangoservice. Танго; импорт com. Google. кран. tangoservice. Танго. OnTangoUpdateListener; импорт com. Google. кран. tangoservice. TangoConfig; импорт com. Google. кран. tangoservice. TangoCoordinateFramePair; импорт com. Google. кран. tangoservice. TangoPoseData; // Здесь больше объявлений импорта публичный класс MainActivity extends Activity {@Override protected void onCreate (Bundle savedInstanceState) {супер. OnCreate (savedInstanceState); setContentView (R. layout. activity_main); mTranslationTextView = (TextView) findViewById (R. id. translation_text_view); mRotationTextView = (TextView) findViewById (R. id. rotation_text_view); // Мгновенный клиент Tango mTango = новый Tango (this); // Настройка конфигурации Tango для отслеживания движения mConfig = mTango. getConfig (TangoConfig. CONFIG_TYPE_CURRENT); MCONFIG. putBoolean (TangoConfig. KEY_BOOLEAN_MOTIONTRACKING, true);} @Override protected void onActivityResult (int requestCode, int resultCode, Intent data) {try {setTangoListeners ();} catch (TangoErrorException e) {} try {mTango. connect (mConfig);} catch (TangoOutOfDateException e) {} catch (TangoErrorException e) {}} private void setTangoListeners () {// Выбор пар координат кадра ArrayList framePairs = new ArrayList (); framePairs. add (новый TangoCoordinateFramePair (TangoPoseData. COORDINATE_FRAME_START_OF_SERVICE, TangoPoseData. COORDINATE_FRAME_DEVICE)); // Добавить прослушиватель для данных tango pose mTango. connectListener (framePairs, new OnTangoUpdateListener () { @Override public void onPoseAvailable (позыв TangoPoseData) { // Форматирование данных перевода и вращения Data String translationMsg = String. format (sTranslationFormat, pose. перевод [0], поза, перевод [1], поза, перевод [2]); окончательное строковое вращениеMsg = строковый формат (sRotationFormat, pose. rotation [0], поворот [1], поворот [2], posose. rotation [3]); // Отображать данные в TextViews runOnUiThread (new Runnable () { @Override public void run () { mTranslationTextView. setText (translationMsg); mRotationTextView setText (rotationMsg); } } ); } } );}}
То, что вы видите здесь, это не целая 210-строчная MainActivity класса, но некоторые важные моменты этого класса были обобщены.
Посмотрите на класс MainActivity. Сердце кода действия находится внутри анонимного класса OnTangoUpdateListener с его методом onPoseAvailable.
В повседневной жизни Поза - это то, как вы ориентируете голову по сравнению с вашим окружением. И в терминологии Project Tango, pose - это то, как вы ориентируете устройство относительно его окружения. Поза описывается семью числами, такими как цифры перевода и вращения, которые вы видите на предыдущем рисунке.
Когда аппаратное обеспечение устройства воспринимает новую позу, программное обеспечение вызывает метод onPoseAvailable. Метод onPoseAvailable должен отображать сообщения, такие как Translation: -2.6622, 3. 214773, 2. 824979 в текстовых полях деятельности.
Но есть проблема. В правилах потоковой передачи Android указано, что ни один поток, отличный от основного потока, не может обновлять пользовательский интерфейс приложения. В классе MainActivity экземпляр OnTangoUpdateListener запускается в потоке полностью. Таким образом, метод onPoseAvailable экземпляра не может отображать сообщения в текстовых полях активности, напрямую вызывая mTranslationTextView. setText и mRotationTextView. setText.
Но поскольку профессор Фарнсворт в Футурама всегда говорит, есть «Хорошие новости, все! «Android имеет метод runOnUiThread для таких случаев. Параметр метода runOnUiThread - это класс, реализующий интерфейс Runnable от Java. В коде приложения QuickStart метод запуска этого класса отображает текст от имени экземпляра OnTangoUpdateListener. В конце пользователь устройства видит данные перевода и вращения, и все хорошо.