Device Lab от Google раздает всякие интересные устройства для тестирования, чем было грех не воспользоваться. Захотелось изучить работу c Android TV. Мной была подана заявка на тестирование Android TV. В качестве подопытного приложения — головоломка, математическая игра Mathable для Android. Описание условий получения устройств здесь. Заявка была одобрена, съездил в офис хабра забрал тестовое устройство — Forge TV от Razer.
Статья автора Баркалов Дмитрий, в рамках конкурса «Device Lab от Google».
Доработка приложения для поддержки Android TV
Надо объявить activity которая будет запускаться первой на TV. Она должна быть в портретной ориентации без статус бара и тулбара. У меня как раз такая и есть, поэтому добавляем intent filter в существующую.
<activity android:name=".ui.LauncherActivity" android:label="@string/app_name"
android:banner="@drawable/ic_banner">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
Чтобы приложение появилось в соответствующем разделе добавляем android:isGame=«true»
<application android:name=".MathableApplication"
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:isGame="true">
После этого можно запускать приложения для теста. Но надо учесть что на TV нет сенсорного экрана и надо обходиться одним пультом.
Выбор контрола происходит перемещением фокуса. Поэтому, например, для кнопок добавил в селектор бекграунда состояние focused.
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/btn_disabled" android:state_enabled="false"/>
<item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/>
<item android:drawable="@drawable/btn_focused" android:state_focused="true"/>
<item android:drawable="@drawable/btn_normal"/>
</selector>
Для управления навигацией надо указать какие элементы могут иметь фокус и порядок перемещения фокуса. Как это делать написано здесь.
Подключение Android-TV к ноутбуку для установки и запуска приложения
Приложение работает на эмуляторе, хочется запустить приложение на реальном устройстве. Конечно, можно по сети перекинуть apk или в play store опубликовать бету. Но это долго, и вдруг нужна будет отладка, поэтому только проводок, только хардкор!
На TV имеется USB порт, который может работать как хост и как устройство. По умолчанию режим отладки выключен, и порт работает к режиме хоста. Для возможности отладки надо поменять эти настройки. Как это сделать подробно написано в />инструкции от производителя.
Есть одна проблемка, не нашлось USB кабеля A — A, т.е. папа — папа, пришлось спаять из двух имеющихся хвостов. Если кому потребуется такое делать, то соединять 1 к 1 все провода.
После подключения устройство появилось в списке устройств доступных для отладки.
Запускаем!
В качестве телевизора к устройству подключен монитор через переходник HDMI-VGA. Жмем Run! Приложение запустилось. Никаких особо отличий от эмулятора нет. Теперь можно пользоваться пультом для навигации по приложению. Также можно использовать для управления приложение Android TV. Что я и сделал на своем Nexus.
Мобильное приложение пульта может подключаться к Android TV по Wi-Fi или Bluetooth.
Приложение на Android TV.
Можно публиковать приложение в Android Play Store! В итоге, оказалось что адаптировать приложение для Android TV совсем не сложно. Достаточно добавить нужную информацию в манифест приложения и обрабатывать перемещение фокуса между контролами. Конечно, добавить для них соответствующий селектор.
GridView и RecyclerView умеют предсказуемо работать с перемещением фокуса. Если бы этого оказалось недостаточно, то можно обрабатывать перемещение фокуса самому в документации есть пример, как это делать.
Полезная информация по созданию приложений для TV здесь.
Автор: Google