- PVSM.RU - https://www.pvsm.ru -

Запускаем свою игру на Android TV

Device Lab от Google раздает всякие интересные устройства для тестирования, чем было грех не воспользоваться. Захотелось изучить работу c Android TV. Мной была подана заявка на тестирование Android TV. В качестве подопытного приложения — головоломка, математическая игра Mathable [1] для Android. Описание условий получения устройств здесь [2]. Заявка была одобрена, съездил в офис хабра забрал тестовое устройство — Forge TV от Razer [3].

Запускаем свою игру на Android TV - 1
Статья автора Баркалов Дмитрий, в рамках конкурса «Device Lab от Google» [4].

Доработка приложения для поддержки 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>

Для управления навигацией надо указать какие элементы могут иметь фокус и порядок перемещения фокуса. Как это делать написано здесь [5].

Подключение Android-TV к ноутбуку для установки и запуска приложения

Приложение работает на эмуляторе, хочется запустить приложение на реальном устройстве. Конечно, можно по сети перекинуть apk или в play store опубликовать бету. Но это долго, и вдруг нужна будет отладка, поэтому только проводок, только хардкор!

На TV имеется USB порт, который может работать как хост и как устройство. По умолчанию режим отладки выключен, и порт работает к режиме хоста. Для возможности отладки надо поменять эти настройки. Как это сделать подробно написано в />инструкции от производителя.

Есть одна проблемка, не нашлось USB кабеля A — A, т.е. папа — папа, пришлось спаять из двух имеющихся хвостов. Если кому потребуется такое делать, то соединять 1 к 1 все провода.

Запускаем свою игру на Android TV - 2

После подключения устройство появилось в списке устройств доступных для отладки.

Запускаем свою игру на Android TV - 3

Запускаем!

В качестве телевизора к устройству подключен монитор через переходник HDMI-VGA. Жмем Run! Приложение запустилось. Никаких особо отличий от эмулятора нет. Теперь можно пользоваться пультом для навигации по приложению. Также можно использовать для управления приложение Android TV. Что я и сделал на своем Nexus.

Запускаем свою игру на Android TV - 4

Мобильное приложение пульта может подключаться к Android TV по Wi-Fi или Bluetooth.

Запускаем свою игру на Android TV - 5

Приложение на Android TV.

Запускаем свою игру на Android TV - 6

Можно публиковать приложение в Android Play Store! В итоге, оказалось что адаптировать приложение для Android TV совсем не сложно. Достаточно добавить нужную информацию в манифест приложения и обрабатывать перемещение фокуса между контролами. Конечно, добавить для них соответствующий селектор.

GridView и RecyclerView умеют предсказуемо работать с перемещением фокуса. Если бы этого оказалось недостаточно, то можно обрабатывать перемещение фокуса самому в документации есть пример [6], как это делать.

Полезная информация по созданию приложений для TV здесь [7].

Автор: Google

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/android/211137

Ссылки в тексте:

[1] Mathable: https://play.google.com/store/apps/details?id=com.diolan.mathable

[2] здесь: https://habrahabr.ru/article/302492/

[3] Forge TV от Razer: https://www.razerzone.ru/product/systems/razer-forge-tv

[4] «Device Lab от Google»: http://special.habrahabr.ru/google/lab

[5] здесь: https://developer.android.com/training/tv/start/navigation.html

[6] пример: https://developer.android.com/training/game-controllers/controller-input.html

[7] здесь: https://developer.android.com/training/tv/index.html

[8] Источник: https://habrahabr.ru/post/310522/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best