Хотите лучше понять Android TV? Возможно, вы хотите расширить существующие проекты Android для поддержки этой новой платформы, или у вас есть идея для приложения для Android TV, которое вы хотите разработать.
Какой бы ни была ваша мотивация, эта статья познакомит вас с платформой Android TV, от того, что такое Android TV и характеристиками эффективного телевизионного приложения, вплоть до создания и тестирования вашего собственного образца проекта Android TV.
1. Что такое Android TV?
Android TV, анонсированный на Google IO 2014 , представляет собой новую платформу Smart TV от Google. Пользователи могут либо приобрести телевизор со встроенной новой платформой, либо они могут добавить Android TV к существующему телевизору, купив отдельную приставку, такую как Nexus Player .
По сути, Android TV выводит приложения и функциональные возможности, которыми пользователи уже пользуются на небольших устройствах Android, на большой экран. Пользователи могут загружать приложения для Android TV из знакомого магазина Google Play, а платформа поддерживает Google Cast , поэтому пользователи могут транслировать контент со своего смартфона или планшета на свое устройство Android TV.
2. Разработка для Android TV
Если у вас есть опыт разработки для Android-смартфонов или планшетов, Android TV сразу почувствует себя знакомым, но есть некоторые важные отличия, о которых вам следует знать. В этом разделе рассматриваются лучшие практики, которые являются уникальными для Android TV.
Эффективный опыт на 10 футов
Согласно официальной документации Android TV , средний телезритель находится на расстоянии около 10 футов от экрана, поэтому весь экранный контент должен быть четко виден с расстояния 10 футов.
Один из приемов для обеспечения эффективного «10-футового опыта» заключается в разработке пользовательского интерфейса, который автоматически изменяет размеры в зависимости от размера экрана телевизора. Это означает использование относительного размера макета, такого как fill_parent
, а не абсолютного размера, и выбор независимых от плотности единиц пикселей, а не абсолютных пикселей.
Вы также должны сводить текст к минимуму, так как текст становится все труднее читать на расстоянии. Насколько это возможно, вы должны общаться со своими пользователями с помощью других методов, таких как наложение голоса, звуковые эффекты, видео и изображения.
Если вам нужно включить текст, сделайте его проще для чтения:
- избегая легких шрифтов
- избегать шрифтов с очень узкими или очень широкими штрихами
- используя светлый текст на темном фоне
- разбивая текст на маленькие кусочки
Минимизировать и упростить взаимодействие
Подумайте, как вы взаимодействуете со своим телевизором. Обычно вы выполняете несколько простых взаимодействий, чтобы получить нужный контент, будь то смена канала, загрузка DVD-плеера или запуск любимого приложения для потоковой передачи контента.
Вы не ожидаете, что вам придется выполнять сложные взаимодействия, как и пользователи Android TV. Если вы хотите удержать внимание пользователя, ваше приложение должно иметь как можно меньше экранов между точкой входа в приложение и погружением в контент.
Даже когда пользователь погружен в ваше приложение, вы должны сводить взаимодействия к минимуму и избегать любых сложных взаимодействий, поскольку у вашего обычного пользователя телевизора есть ограниченные средства управления — обычно это либо пульт дистанционного управления, игровой контроллер, либо официальное приложение для Android TV установлен на своем смартфоне или планшете.
Простая навигация
Элементы управления телевизором, как правило, ограничены панелью управления и кнопкой выбора, поэтому ваша задача — создать эффективную схему навигации для вашего приложения, используя эти ограниченные элементы управления.
Одна хитрость заключается в том, чтобы использовать группу представлений (такую как представление списка или представление сетки), которая автоматически упорядочивает элементы пользовательского интерфейса вашего приложения в списки или сетки, которые легко перемещаются с помощью навигационной панели и кнопки выбора.
Ваши пользователи также должны иметь возможность сразу определить, какой объект выбран в данный момент. Вы можете выделить текущий выбранный объект, используя визуальные подсказки, такие как размер, тень, яркость, анимация и прозрачность.
Простой и незагроможденный
Android TV может дать вам больше игрового пространства, но не увлекайтесь и старайтесь заполнить каждый дюйм пространства. Простой, незагроможденный пользовательский интерфейс не только визуально привлекательнее, но и удобнее в навигации — что особенно важно, учитывая ограниченные элементы управления, доступные для вашего обычного пользователя Android TV.
Пользовательский интерфейс, содержащий несколько больших, жирных элементов пользовательского интерфейса, также обеспечит лучший «10-футовый опыт», чем экран, заполненный множеством меньших элементов пользовательского интерфейса.
Поддержка ландшафтного режима
Все действия вашего проекта должны поддерживать альбомную ориентацию, иначе ваше приложение не будет отображаться пользователям Android TV в магазине Google Play.
Если вы разрабатываете приложение, которое также может работать на смартфонах и планшетах, имейте в android:screenOrientation="portrait"
что если ваш проект содержит android:screenOrientation="portrait"
то для android.hardware.screen.portrait
android:screenOrientation="portrait"
установлено значение true
. Вы должны указать, что, хотя ваше приложение поддерживает портретную ориентацию, где оно доступно, оно может работать на устройствах, где портретный режим не поддерживается (например, на Android TV):
1
2
3
|
<uses-feature
android:name=»android.hardware.screen.portrait»
android:required=»false» />
|
Разрешить для оверскана
Чтобы по краям экрана не было пустого пространства, телевизоры могут обрезать края содержимого в процессе, известном как пересканирование. Поскольку вы не хотите потерять какой-либо важный контент для пересканирования, вы должны оставить поле по краям вашего приложения, свободное от каких-либо элементов пользовательского интерфейса.
Библиотека Leanback v17 автоматически применяет к вашему приложению поля, защищающие от сканирования. В качестве альтернативы, вы можете создать свои собственные поля, безопасные для сканирования, оставляя 10% пустого пространства по краям вашего приложения. Это преобразуется в поле 48dp вокруг левого и правого краев ( android:layout_marginRight="48dp"
) и 27dp вдоль верха и низа ( android:layout_marginBottom="27dp"
).
Дизайн для аппаратных ограничений Android TV
Телевизоры Android не имеют многих аппаратных функций, обычно доступных для других устройств на платформе Android. Когда вы разрабатываете для платформы Android TV, вы не можете использовать следующее:
- Связь ближнего поля (NFC)
- GPS
- камера
- Микрофон
- Сенсорный экран
- Телефония
Если вы хотите, чтобы ваше приложение работало не на телевизионных устройствах, таких как смартфоны и планшеты, вы можете указать, что, хотя вашему приложению не требуются эти аппаратные функции, оно будет использовать их там, где они доступны, например:
1
2
|
<uses-feature android:name=»android.hardware.touchscreen»
android:required=»false»/>
|
Также имейте в виду, что следующие объявления манифеста разрешений на использование подразумевают аппаратные функции, которые Android TV не поддерживает:
-
RECORD_AUDIO
-
CAMERA
-
ACCESS_COARSE_LOCATION
-
ACCESS_FINE_LOCATION
3. Создание примера проекта Android TV
В заключительной части этого урока мы из первых рук посмотрим на некоторый готовый для телевидения код, создав и протестировав базовый проект для Android TV.
Прежде чем разрабатывать что-либо для платформы Android TV, убедитесь, что вы обновили свой SDK до Android 5.0 (API 21) или выше, а инструменты SDK — до версии 24.0.0 или выше.
Как только вы обновитесь, пришло время создать ваше приложение:
- Запустите Android Studio.
- Выберите « Начать новый проект Android Studio» .
- Дайте вашему проекту имя и домен. Нажмите Далее .
- Выберите ТВ, а затем снимите все остальные флажки. Хотя вы можете создавать проекты для Android TV, в которых есть модуль для смартфона, планшета и / или Android Wear, для простоты мы будем создавать проект с одним модулем. Нажмите Далее .
5. Выберите Android TV Activity и нажмите Next .
6. Придерживайтесь настроек по умолчанию и нажмите Готово .
Android Studio создаст ваш проект.
4. Сломать манифест
Теперь, когда вы создали свой пример проекта, мы построчно рассмотрим Манифест Android, так как этот файл содержит много кода для ТВ.
Обратите внимание, что, хотя большая часть этого кода генерируется автоматически при создании проекта Android TV, я внес некоторые незначительные дополнения и корректировки, которые все четко обозначены в тексте.
1
2
3
4
5
|
<?xml version=»1.0″ encoding=»utf-8″?>
http://schemas.android.com/apk/res/android»
package=»com.example.jessica.tvdemo» >
<uses-permission android:name=»android.permission.INTERNET» />
<uses-permission android:name=»android.permission.RECORD_AUDIO» />
|
Как уже упоминалось, разрешение android.permission.RECORD_AUDIO
подразумевает, что вашему приложению требуется android.hardware.microphone
. Таким образом, эта строка кода эффективно предотвращает установку вашего приложения на устройствах, которые не имеют доступа к микрофону. Если ваше приложение может работать без микрофона, вы должны сделать следующее дополнение:
1
2
3
|
<uses-feature
android:name=»android.hardware.microphone»
android:required=»false» />
|
Добавление приведенного выше кода означает, что пользователи могут устанавливать ваше приложение на устройствах, которые не имеют доступа к оборудованию микрофона.
1
2
3
|
<uses-feature
android:name=»android.hardware.touchscreen»
android:required=»false» />
|
Хотя поддержка сенсорных экранов встречается на многих устройствах под управлением Android, это не относится к Android TV. Ваше приложение для Android TV должно заявить, что оно не требует поддержки сенсорного экрана.
1
2
|
<uses-feature
android:name=»android.software.leanback»
|
Приведенный выше фрагмент кода заявляет, что ваше приложение использует интерфейс Leanback, который мы обсуждали ранее.
1
|
android:required=»true» />
|
Если вы хотите, чтобы ваше приложение работало не на телевизионных устройствах, где Leanback не поддерживается, вам нужно изменить вышеприведенную строку на android:required="false"
.
1
2
3
4
5
|
<application
android:allowBackup=»true»
android:icon=»@mipmap/ic_launcher»
android:label=»@string/app_name»
android:theme=»@style/Theme.Leanback»
|
Вышеупомянутое дополнение применяет тему Leanback к вашему проекту.
1
|
android:banner=»@drawable/banner» >
|
Баннеры приложений представляют ваше приложение на домашнем экране Android TV и показывают, как пользователь запускает ваше приложение. Баннер вашего приложения должен быть изображением 320xxx180 xhdpi и содержать текст.
Если вы хотите использовать один и тот же баннер во всех ваших действиях, вы должны добавить атрибут android:banner
к тегу <application>
вашего манифеста, как я сделал здесь. Если вы хотите предоставить разные баннеры для каждого действия, вам нужно вместо этого добавить атрибут android:banner
ко всем тегам <activity>
вашего приложения.
1
2
3
4
5
6
7
8
9
|
<activity
android:name=».MainActivity»
android:icon=»@drawable/app_icon_your_company»
android:label=»@string/app_name»
android:logo=»@drawable/app_icon_your_company»
android:screenOrientation=»landscape» >
<intent-filter>
<action android:name=»android.intent.action.MAIN» />
<category android:name=»android.intent.category.LEANBACK_LAUNCHER» />
|
Этот фрагмент объявляет об активности запуска для ТВ.
1
2
3
4
5
6
7
|
</intent-filter>
</activity>
<activity android:name=».DetailsActivity» />
<activity android:name=».PlaybackOverlayActivity» />
<activity android:name=».BrowseErrorActivity» />
</application>
</manifest>
|
5. Тестирование примера приложения
Следующим шагом является тестирование работы вашего приложения с точки зрения пользователя. Даже если у вас есть доступ к физическому Android TV, вам нужно протестировать свой проект на нескольких устройствах, поэтому вы всегда должны создавать хотя бы один Android TV AVD.
Чтобы создать свой AVD:
- Запустите диспетчер AVD, нажав кнопку « Диспетчер AVD» на панели инструментов или выбрав « Инструменты» > « Android» > « Диспетчер AVD» .
- Нажмите Создать новое виртуальное устройство .
- Выберите категорию телевизора .
- Выберите одно из перечисленных устройств Android TV и нажмите « Далее» .
- Выберите образ вашей системы и нажмите « Далее» .
- Дайте вашему AVD имя и нажмите Finish .
Чтобы протестировать пример проекта, выберите « Выполнить» > « Запустить приложение» , затем выберите «TV AVD». Когда AVD завершит загрузку, вы увидите пользовательский интерфейс Android TV с баннером вашего приложения в левом нижнем углу.
Чтобы запустить приложение, нажмите на изображение баннера. После небольшой задержки ваше приложение появится в окне AVD.
6. Больше исследовать
В этой статье вы познакомились с Android TV и узнали, как создать пример приложения. Если вы хотите больше узнать о платформе Android TV, вы можете продолжить разработку своего примера приложения, взглянув на следующие области:
- BrowseFragment. В примере приложения каждая строка содержимого соответствует категории. Эта часть пользовательского интерфейса создается с
BrowseFragment
классаBrowseFragment
. Подробнее об этом фрагменте можно узнать в разделе « Создание обозревателя каталогов » официальных документов по Android TV. - DetailsFragment. Нажмите на любую часть контента, чтобы увидеть больше информации об этом контенте. Чтобы расширить эту функциональность, взгляните на класс
DetailsFragment
в построении представленияDetailsFragment
.
- SearchFragment. Несмотря на значок поиска в верхнем левом углу приложения, функция поиска не работает в вашем примере приложения. Чтобы заставить его работать, вам нужно взглянуть на класс
SearchFragment
, о котором вы также можете найти более подробную информацию в документации по Android TV .
Вывод
Теперь вы должны лучше понять, что включает в себя разработка для Android TV. Есть несколько предостережений, на которые стоит обратить внимание, но разработка для Android TV не должна быть слишком сложной, если у вас уже есть опыт разработки для Android.