Вы можете сделать свое приложение доступным в автомобилях с Android Auto или Android Automotive OS. Используйте архитектуру приложения, которая подходит для обоих случаев, чтобы каждый пользователь мог наслаждаться вашим приложением.
Что такое Android for Cars?
Мультимедийное приложение для автомобилей позволяет пользователям легко интегрировать цифровые технологии в свои автомобили. Расширяя те же приложения для телефонов, чтобы они были доступны для автомобилей, вы создаете лучший пользовательский опыт. Для этого вы можете интегрировать свое приложение с Android Auto или Android Automotive OS.
Приложения Android для автомобилей не должны создавать отвлекающие факторы для водителя. Вы можете свести к минимуму отвлекающие факторы, следуя рекомендациям, например, используя голосовые команды и очень практичный визуальный дизайн. Таким образом, ваше мультимедийное приложение может показывать водителю своевременную информацию только тогда, когда она актуальна, и использовать предсказуемые шаблоны для общих задач.
Android Auto
Android Auto обеспечивает удобство использования приложения, оптимизированное для водителей, для пользователей телефонов Android с приложением Android Auto и совместимым автомобилем или стереосистемой, установленной после покупки. Они могут использовать ваше приложение прямо на дисплее автомобиля, подключив к нему телефон. Чтобы подключить Android Auto к приложению на телефоне, нужно создать сервисы, которые Android Auto использует для показа оптимизированного интерфейса водителю.
Android Automotive OS
Android Automotive OS – это информационно-развлекательная система на базе Android, которая встроена в автомобиль. Система автомобиля – это отдельное устройство на базе Android, оптимизированное для вождения. В Android Automotive OS пользователи устанавливают приложения непосредственно в автомобиль, а не на телефон.
Поддерживаемые категории приложений
Мультимедийные приложения позволяют пользователям находить и воспроизводить музыку, радио, аудиокниги и другой аудиоконтент в автомобиле. Подробнее о том, как создавать приложения для воспроизведения аудио в автомобилях и как создавать мультимедийные приложения для автомобилей…
Мультимедийные приложения создаются с помощью MediaLibraryService и MediaSession.
В Android Automotive OS вы также можете создавать экраны входа и настроек (для использования во время парковки) с помощью Views или Compose.
Видеоприложения позволяют пользователям смотреть потоковое видео, когда автомобиль припаркован. Основная цель таких приложений – показ потокового видео. Эти приложения созданы с помощью Views или Compose. Подробную информацию вы найдете на страницах с инструкциями о том, как разрабатывать приложения для воспроизведения видео на устройствах с Android Automotive OS и как разрабатывать приложения для просмотра видео на устройствах с Android Automotive OS.
Как создавать приложения для воспроизведения аудио в автомобилях
В этом руководстве предполагается, что у вас уже есть базовое приложение для воспроизведения медиафайлов. Если у вас его нет, ознакомьтесь со статьей Как создать базовое приложение медиапроигрывателя.
В этом руководстве вы найдете информацию о том, что нужно сделать, и ссылки на дополнительные ресурсы с подробными инструкциями.
Компоненты воспроизведения
Media3 предлагает несколько ключевых компонентов для воспроизведения. Классы, из которых состоят эти компоненты, знакомы вам, если вы работали с предыдущими медиабиблиотеками Android.
На следующей схеме показано, как эти компоненты объединяются в типичном приложении.
Подробнее о компонентах воспроизведения…
Реализуйте MediaLibraryService и MediaLibrarySession
MediaLibraryService предоставляет стандартизированный API для показа медиатеки и доступа к ней.
Это необходимо, когда вы добавляете поддержку Android Auto или Android Automotive OS в свое мультимедийное приложение, поскольку эти платформы предоставляют собственный безопасный для водителя интерфейс для вашей медиатеки. Подробнее о том, как реализовать и использовать MediaLibraryService, рассказывается в статье Как показывать контент с помощью MediaLibraryService.
Для управления воспроизведением используйте сеанс мультимедиа. MediaSession API предоставляет универсальный способ взаимодействия с аудио- или видеопроигрывателем. Библиотека Jetpack Media3 включает класс MediaLibrarySession, который расширяет MediaSession, добавляя API для просмотра контента.
Подключение сеанса воспроизведения к проигрывателю позволяет приложению сообщать о воспроизведении медиаконтента внешним источникам, таким как Android Auto, Android Automotive OS или Google Ассистент, и получать от них команды. Дополнительную информацию можно найти в статьях Управление воспроизведением и его реклама с помощью MediaSession и Использование MediaLibrarySession.
Как минимум, ваш сеанс мультимедиа должен объявлять поддержку следующих команд проигрывателя:
В руководстве Как включить элементы управления воспроизведением описаны способы настройки элементов управления воспроизведением в автомобилях.
Когда Android Auto или Android Automotive OS подключаются к приложению, они запрашивают библиотеку контента для показа, что запускает метод обратного вызова onGetLibraryRoot(). Вы можете быстро вернуть корневой мультимедийный объект, чтобы разрешить доступ к библиотеке. Метод обратного вызова onGetChildren() вызывается, когда Android Auto или Android Automotive OS пытается просмотреть более глубокие уровни вашей библиотеки контента.
На этих платформах действуют дополнительные ограничения, касающиеся структуры библиотеки контента. Подробнее о том, как настроить отображение библиотеки контента, рассказывается в руководстве Как создать сервис просмотра медиаконтента.
Как объявить о поддержке Android Auto
Чтобы указать, что приложение "Телефон" поддерживает Android Auto, добавьте в манифест следующую запись:
<application>
...
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Эта запись манифеста ссылается на XML-файл, в котором указано, какие автомобильные функции поддерживает ваше приложение. Чтобы указать, что у вас есть мультимедийное приложение, добавьте XML-файл с названием automotive_app_desc.xml в каталог res/xml/ в своем проекте. В этом файле должен быть следующий контент:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Как объявить о поддержке Android Automotive OS
Вам нужно создать автомобильный модуль, поскольку не вся логика вашего приложения может быть общей с автомобильным приложением. Некоторые компоненты Android Automotive OS, такие как манифест, имеют требования, специфичные для платформы. Создайте модуль, который позволит хранить код этих компонентов отдельно от остального кода проекта, например кода мобильного приложения.
Чтобы добавить автомобильный модуль в проект, выполните следующие действия:
- В Android Studio нажмите File > New > New Module (Файл > Создать > Создать модуль).
- Выберите Automotive Module (Автомобильный модуль) и нажмите Next (Далее).
- Введите название приложения или библиотеки. Это название приложения, которое пользователи видят в Android Automotive OS.
- Укажите название модуля.
- Измените название пакета, чтобы оно соответствовало вашему приложению.
В поле Minimum SDK (Минимальная версия SDK) выберите API 28: Android 9.0 (Pie) и нажмите Next (Далее).
Все автомобили, поддерживающие Android Automotive OS, работают на Android 9 (уровень API 28) или более поздней версии, поэтому выбор этого значения позволяет ориентироваться на все совместимые автомобили.
Выберите Нет активности и нажмите Готово.
Создав модуль в Android Studio, откройте файл AndroidManifest.xml в новом автомобильном модуле:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
Элемент application содержит стандартную информацию о приложении, а также элемент uses-feature, который объявляет о поддержке Android Automotive OS.
Обратите внимание, что в манифесте не объявлены никакие действия.
Если вы реализовали действия для настроек или входа, добавьте их здесь. Эти действия запускаются системой с помощью явных намерений и являются единственными действиями, которые вы объявляете в манифесте для приложения Android Automotive OS.
После добавления настроек или действий по входу завершите файл манифеста, задав атрибут android:appCategory="audio" в элементе application и добавив следующие элементы uses-feature:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:appCategory="audio"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false" />
</manifest>
Если явно задать для этих функций значение required="false", это гарантирует, что ваше приложение не будет конфликтовать с доступными аппаратными функциями на устройствах с Automotive OS.
Чтобы объявить, что ваше приложение поддерживает Android Automotive OS, добавьте в манифест следующую запись:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Эта запись в манифесте ссылается на XML-файл, в котором указаны функции, поддерживаемые вашим приложением.
Чтобы указать, что у вас есть мультимедийное приложение, добавьте XML-файл с названием automotive_app_desc.xml в каталог res/xml/ проекта. Добавьте в этот файл следующий контент:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Фильтры интентов
Android Automotive OS использует явные интенты для запуска действий в мультимедийном приложении. Не включайте в файл манифеста действия с фильтрами интентов CATEGORY_LAUNCHER или ACTION_MAIN.
Действия, подобные описанным в примере ниже, обычно нацелены на телефон или другое мобильное устройство. Объявите эти Activity в модуле, который создает приложение "Телефон", а не в модуле, который создает приложение для Android Automotive OS.
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
Дальнейшие действия
Теперь, когда у вас есть приложение для Android Auto и Android Automotive OS, вы можете предпринять дополнительные шаги, чтобы оптимизировать его для более безопасного использования во время вождения. Дополнительные рекомендации по обеспечению безопасности и удобства пользователей можно найти в технических руководствах по голосовым командам, защите от отвлекающих факторов и обработке ошибок.
Как разрабатывать приложения для просмотра видео на устройствах с Android Automotive OS
Поскольку видеоприложения для автомобилей относятся к отдельной категории, отличной от мультимедийных приложений, вам необходимо учитывать некоторые особые требования к видеоприложениям, описанные в статьях Как создавать приложения для автомобилей, которые можно использовать, когда автомобиль припаркован и Как разрабатывать приложения для просмотра видео на устройствах с Android Automotive OS. Для этого выполните следующие действия:
Как указать, что ваше приложение является видеоприложением
Чтобы указать, что ваше приложение поддерживает видео, добавьте атрибут android:appCategory="video" в элемент <application> манифеста.
<manifest ...>
...
<application
...
android:appCategory="video">
...
</application>
</manifest>
Объявите аппаратную функцию Android Automotive OS
Чтобы объявить, что ваше приложение поддерживает устройства с Android Automotive OS, добавьте в манифест элемент android.hardware.type.automotive <uses-feature>.
О том, какое значение атрибута android:required выбрать ("false" или "true"), читайте в разделе Объявление аппаратной функции AAOS.
<manifest ...>
...
<uses-feature android:name="android.hardware.type.automotive" ...>
...
</manifest>