Основы работы с приложениями

Автомобиль – ваш холст: разработка приложений для Android Auto

Колонки

О приложении

О выступлении

Поскольку экраны в автомобилях с Android Auto и Android Automotive OS становятся все больше, разработчики сталкиваются с уникальной двойной задачей: создавать адаптивные приложения с широкими возможностями для использования во время парковки и безопасные приложения на основе шаблонов для использования во время вождения. На этом 30-минутном техническом занятии мы рассмотрим сквозную архитектуру и подходы к разработке, которые помогут вам адаптировать приложения Android для автомобилей.

Вы узнаете все, что нужно для создания приложений, которые будут использоваться в автомобилях, – от основ до новейших подходов к разработке медиасервисов, которые переключаются с аудио на видео, когда автомобиль останавливается.

Сводка

  • Android для автомобилей поддерживает две платформы: Android Auto и Android Automotive OS. Одна из них транслируется с телефона, а другая работает непосредственно в автомобиле.
  • Библиотека приложений для автомобилей содержит шаблоны интерфейсов, оптимизированных для вождения и адаптирующихся к различным конфигурациям оборудования автомобиля.
  • Приложения для припаркованных автомобилей используют стандартные действия Android, чтобы обеспечивать работу таких функций, как стриминг видео, игры и браузеры.
  • В библиотеке приложений Car App Library 1.9 добавлены новые компоненты интерфейса и токены для настройки брендинга. Кроме того, в Android Automotive OS теперь полностью поддерживаются шаблоны мультимедиа.
  • Функция Park-to-drive позволяет запускать нативные видео, когда автомобиль припаркован, и переключаться на медиашаблоны, чтобы не прерывать воспроизведение аудио во время движения.

Ресурсы

Gemini Notebook

Темы

  • android-for-cars
  • android-auto
  • android-automotive-os
  • car-app-library
  • Media3
  • parked-apps

Расшифровка

Знакомство с Android for Cars

  • Теперь

  • Здравствуйте!

  • Спасибо, что присоединились к нам на этом занятии. Автомобиль – это ваш холст.

  • На этом занятии мы расскажем о разработке приложений Android для автомобилей.

  • Меня зовут Пол Ламмертсма.

  • А я Томас Уэзерс.

  • Мы инженеры по связям с разработчиками в команде Android for Cars.

  • Уверен, что многие из вас потратили немало времени и сил, чтобы ваши приложения отлично выглядели и работали на самых разных экранах и устройствах, включая телефоны, складные устройства, планшеты и т. д.

  • Сегодня мы поговорим об экране, о котором вы, возможно, не задумывались.

  • и уникальным образом взаимодействовать с пользователями.

  • Это экран автомобиля.

  • Для начала давайте кратко разберем, что такое Android для автомобилей.

  • Android for Cars – это не единая система.

  • Таргетинг можно настроить на две платформы.

  • Первый – Android Auto, система, работающая на базе телефона.

  • При использовании Android Auto приложение запускается на телефоне, а его интерфейс проецируется на дисплей автомобиля по проводному или беспроводному подключению.

  • Второй вариант – Android Automotive OS. Это версия Android, которая работает непосредственно в автомобиле.

  • Android Automotive OS работает независимо от телефона, имеет прямой доступ к оборудованию автомобиля, например климат-контролю и радио, и, что важно, также управляет собственным подключением для передачи данных.

  • Некоторые автомобили с Android Automotive OS также имеют встроенные сервисы Google.

  • В автомобилях со встроенными сервисами Google также есть приложения и сервисы Google, например Google Play, Gemini и Google Карты.

  • Наша цель – сделать так, чтобы вы могли легко создавать приложения, которые будут отлично работать на обеих платформах.

  • Вот пример мультимедийного приложения, созданного с помощью Car App Library. Посмотрите, как оно выглядит на экранах разных размеров и форм в Android Auto и Android Automotive OS.

  • Существует множество различных типов устройств и поверхностей, для которых вы можете создавать приложения.

  • Возникает вопрос: почему тогда для автомобилей?

  • Во-первых, масштаб здесь довольно велик.

  • Сейчас на дорогах более 250 миллионов автомобилей, совместимых с Android Auto, и более 100 моделей со встроенными сервисами Google от 16 разных брендов.

  • А когда ваши приложения доступны в автомобилях, вы можете обращаться к пользователям, когда они едут на работу, по делам, на семейные мероприятия или даже в путешествие.

  • Согласно опросу American Driving Survey, проведенному Американской автомобильной ассоциацией в 2024 году, водители в США проводят за рулем в среднем 60 минут в день.

  • Но вы можете обращаться к пользователям не только когда они за рулем.

  • Вы также обращаетесь к ним, когда они припаркованы.

  • Например, они могут заряжать электромобиль на станции зарядки ЭМ или ждать ребенка у школы.

  • А с появлением дисплеев для пассажиров у нас будет ещё больше возможностей для взаимодействия с пользователями.

  • Теперь

  • Теперь давайте рассмотрим, какие типы приложений можно создавать для автомобилей.

  • Чтобы понять, как создавать приложения для автомобилей, полезно знать о двух основных ситуациях и состояниях, в которых они могут находиться.

  • Первая – это приложения, которые вы используете во время вождения.

  • Они оптимизированы для использования за рулем и доступны во время движения автомобиля.

  • К ним относятся приложения из категорий, которые вы видите на экране, например аудиоприложения (мы обычно называем их медиаприложениями), приложения для обмена сообщениями и общения, навигации и т. д.

  • Функции, оптимизированные для водителей, должны соответствовать строгим критериям безопасности.

  • При создании интерфейса приложения необходимо учитывать, что оно должно быть безопасным для использования во время движения автомобиля.

  • Есть несколько способов создать приложение, оптимизированное для водителей.

Обзор библиотеки приложений для автомобилей

  • Но в этом видео мы сосредоточимся на использовании библиотеки Car App Library.

  • Это набор библиотек Jetpack, которые предоставляют шаблонный фреймворк с пользовательскими интерфейсами, оптимизированными для вождения, а также обеспечивают адаптацию к различным аппаратным конфигурациям, присутствующим в автомобилях.

  • Например, это могут быть способы ввода, размеры экрана и соотношение сторон.

  • Хотя это не единственный способ создания приложений, оптимизированных для вождения, в этом докладе я хочу сосредоточиться на создании приложений с помощью библиотеки приложений Android for Cars.

  • (сокращенно CAL).

  • Как я только что упомянул, Car App Library – это набор библиотек, которые помогают создавать приложения для использования в автомобилях.

  • Это шаблонный фреймворк, который предоставляет оптимизированные для вождения пользовательские интерфейсы и адаптируется к различным конфигурациям оборудования.

  • Вы можете создать приложение и быть уверенными, что оно будет хорошо работать на всех этих различных конфигурациях, независимо от того, работают ли они на Android Auto или на Android Automotive OS.

  • Приложения, созданные с помощью CAL, могут использовать эту архитектуру хост-клиента.

  • Хост-приложение, которым является Android Auto или Google Automotive App Host (в автомобилях со встроенными сервисами Google), – это системный рендерер.

  • В конечном счете, он контролирует, что должно быть показано пользователю на его дисплеях.

  • Таким образом, разработчик приложения не рисует пиксели.

  • Вместо этого вы передаете структурированные данные и состояние ваших данных в шаблоны библиотеки приложений для автомобилей.

  • И именно этот хост затем берет эти данные и безопасно, в соответствии с требованиями безопасности, рисует их с оптимизированным для отвлечения внимания макетом.

  • Давайте рассмотрим классы в CAL, которые нужно расширить для создания приложения, начиная с CarAppService.

  • Это подкласс сервиса Android, который служит точкой входа для связи размещаемых приложений с клиентскими приложениями. Его цель – создавать экземпляры сеансов, с которыми затем взаимодействует хост.

  • Сеанс можно рассматривать как экземпляр клиентского приложения, запущенного на дисплее в автомобиле.

  • Как и у других компонентов Android, у него есть собственный жизненный цикл, который можно использовать для инициализации и удаления ресурсов, используемых на протяжении всего существования экземпляра сеанса.

  • Это отношение "один ко многим" между CarAppService и сеансом.

  • Например, у CarAppService может быть два экземпляра сеанса: один для основного дисплея, а другой – для дисплея с кластером инструментов для навигационных приложений, поддерживающих такие экраны.

  • Вот пример: у автомобиля есть основной дисплей и дисплей с кластером инструментов. Каждый дисплей связан с отдельным сеансом. Таким образом вы, как разработчик приложений, можете поддерживать автомобили с несколькими дисплеями.

  • В рамках сеанса экземпляры экранов отвечают за создание пользовательских интерфейсов, отображаемых хост-приложениями.

  • Эти пользовательские интерфейсы представлены классами шаблонов, каждый из которых моделирует определенный тип макета, например сетку или список.

  • Таким образом, каждый сеанс управляет стеком экземпляров экрана, которые обрабатывают пути пользователя в разных частях вашего приложения, и, как и в случае с сеансом, у экрана есть собственный жизненный цикл, к которому вы можете подключиться.

  • Но то, что хост отрисовывает ваш интерфейс, а вы используете шаблоны библиотеки приложений Car App Library, не означает, что вы сильно ограничены или не можете настроить свое приложение.

  • Вы можете использовать множество шаблонов и компонентов, а также комбинировать их, чтобы получить желаемый результат.

  • Есть шаблоны общего назначения, которые можно использовать для всех типов приложений в библиотеке приложений для автомобилей, и шаблоны специального назначения, предназначенные для определенных удобств использования приложений, таких как навигация или поиск объектов инфраструктуры.

  • Но прежде чем углубляться в детали создания приложений, оптимизированных для вождения, я хочу рассказать о другой ситуации, когда вы можете запускать приложения в автомобилях: когда автомобиль припаркован.

Разработка приложений для припаркованных автомобилей

  • Некоторые категории приложений, например видео, игры и браузеры, можно использовать только во время парковки.

  • Но когда автомобиль не движется, правила в отношении отвлекающих факторов не действуют, и вы можете использовать интерфейс, который больше похож на ваш существующий адаптивный интерфейс.

  • Приложения для припаркованного автомобиля основаны на действиях и похожи на те, что используются на других устройствах, например телефонах или планшетах. Подробнее о них рассказывается в следующем разделе.

  • Хотя в приложениях для припаркованных автомобилей используются существующие адаптивные действия, вам все равно нужно соблюдать рекомендации по обеспечению качества, предназначенные для автомобилей. Они касаются деклараций манифеста, вырезов на экране, приостановки воспроизведения, когда автомобиль начинает движение, и других аспектов.

  • Чтобы помочь вам автоматизировать эту работу, мы запустили новый навык Android для припаркованных приложений.

  • Поэтому, прежде чем начать, убедитесь, что вы установили Android CLI. Его можно найти по этой короткой ссылке.

  • После настройки запустите android skills list, чтобы изучить доступные навыки.

    android skills list
    android skills add android-for-cars-parked-apps
  • Существует множество различных навыков, которые вы можете использовать, чтобы вывести разработку для Android на новый уровень.

  • А для Android Auto вы можете использовать android skills add android-for-cars-parked-apps, чтобы добавить навык в контекст агента.

  • Теперь, какой бы ИИ-агент вы ни выбрали, он предоставит вам пошаговые инструкции по настройке манифеста для Android Auto или Android Automotive OS, обработке вставок в окнах автомобиля и таких вещей, как обратная навигация, применение ограничений на воспроизведение, отвлекающих водителя, и он может даже проверить ваше видео, игру или браузерное приложение, прежде чем вы отправите их в Google Play.

Обзор категорий приложений для автомобилей

  • Разработка приложений для автомобилей также имеет свои особенности из-за наличия категорий приложений.

  • Как я уже говорил, есть определенные категории приложений, которые можно использовать за рулем, и другие категории приложений, которые можно использовать во время парковки.

  • Выделенные категории можно использовать за рулем.

  • Некоторые из них отмечены аббревиатурой CAL, как я уже упоминал, это библиотека приложений для автомобилей, и приложения из этой категории используют шаблоны, подобные тем, которые мы видели ранее.

  • Давайте быстро пройдемся по ним, не вдаваясь в подробности.

  • Начнем с мультимедийных приложений. Теперь это приложения, которые воспроизводят аудио, а не видео.

  • Это можно сделать двумя способами.

  • Первый вариант, MediaBrowserService, – самый простой.

  • Вы предоставляете метаданные, а интерфейс информационно-развлекательной системы полностью берет на себя отрисовку воспроизведения и интерфейса браузера мультимедиа, оптимизированного для автомобиля.

  • Другой вариант – создать мультимедийное приложение с помощью библиотеки приложений Car App Library. Это дает больше контроля и возможностей для настройки стиля и представления мультимедийных приложений. Томас расскажет об этом подробнее.

  • Навигационные приложения – это, конечно, ключевой вариант использования, предоставляющий маршруты и пошаговые инструкции.

  • К этой категории также относятся приложения для водителей райдшеринга.

  • Приложения для поиска объектов инфраструктуры помогают находить полезные места поблизости, например зарядные станции для электромобилей или парковки.

  • Приложения для интернета вещей позволяют удаленно управлять умными устройствами, например системой умного дома.

  • Также доступны приложения с прогнозом погоды, которые могут показывать данные с радаров в реальном времени, предупреждения о штормах и прогнозы для конкретных мест.

  • И наконец, приложения для общения делятся на три подкатегории: расширение базовых уведомлений в автомобиле, приложения для обмена сообщениями и приложения для видеовызовов.

  • И наконец, есть категории, которые пока не используются: стриминговые сервисы, игры и браузеры.

  • Рад сообщить, что несколько недель назад публикация игр для Android Auto и Android Automotive OS стала доступна всем разработчикам.

  • Вы заметите, что некоторые из этих категорий помечены как "Открыто", другие – как "Бета-версия", а третьи – как "Скоро".

  • Открытая категория означает, что любой разработчик может опубликовать в ней приложение сразу в рабочей версии.

  • Это значит, что вы можете публиковать внутренние и закрытые версии, но не рабочую, если только вы не участвуете в программе раннего доступа.

  • В документации для каждой из этих категорий есть дополнительная информация и ссылка на форму, которую нужно заполнить, чтобы подать заявку.

  • А в разделе "Скоро" перечислены категории, которые пока не поддерживаются, но мы планируем добавить их в будущем.

  • Наша цель – создать единую платформу.

  • Мы хотим, чтобы вы могли создавать приложения и получать максимальный охват, написав код один раз и распространяя его как для Android Auto, так и для Android Automotive OS, независимо от категории.

  • Теперь Томас расскажет о медиа.

Обновления мультимедиа в библиотеке приложений для автомобилей

  • Ура!

  • Отлично.

  • Поэтому в прошлом году мы добавили в версию 1.8 библиотеку приложений для автомобилей для приложений для мультимедиа, которая позволяет использовать в Android Auto шаблоны интерфейсов для просмотра и настраиваемые действия.

  • В том числе шаблон воспроизведения медиаконтента, который вы видите слева.

  • В этом году на конференции I/O мы представили новые интерфейсы для просмотра контента в библиотеке приложений для автомобилей версии 1.9.

  • В бета-версии CAL 1.9 вы можете разблокировать обновления ключевых функций в Auto и Automotive OS.

  • В частности, теперь можно настраивать брендинг с помощью функции App Expression, которая позволяет изменять токены цвета и формы в макетах, отрисованных хостом, с соблюдением правил безопасности. Также добавлены новые компоненты интерфейса, такие как разделы Spotlight, сжатые элементы списка, прокручиваемые чипы и закрепленный мини-проигрыватель.

  • Кроме того, в CAL 1.9 добавлена полная поддержка шаблонов медиаконтента для AAOS, что позволяет объединить обе экосистемы.

  • Скоро выйдет новая версия библиотеки приложений для автомобилей – CAL 10.

  • В CAL версии 10 будет больше пользовательских шаблонов для приложений, предназначенных для общения. Это позволит сделать звонки за рулем удобнее.

  • Мы также добавили новую категорию приложений и шаблонов для приложений, которые позволяют общаться во время вождения.

  • Наконец, мы работаем над тем, чтобы сделать переход от парковки к вождению более плавным с помощью шаблонов библиотеки приложений для автомобилей.

  • Следите за новостями.

Функции, доступные во время парковки и вождения

  • Благодаря возможностям Car App Library ваше приложение может динамически переключаться между режимами и показывать адаптивный контент, когда автомобиль стоит, а когда он начинает движение – плавно возвращаться к шаблонам Car App Library.

  • Например, когда автомобиль стоит, можно использовать специальные способы аутентификации или включать особый режим, в котором доступны видеоподкасты и музыкальные клипы.

  • Она интегрируется непосредственно с шаблоном воспроизведения медиаконтента.

  • Поэтому, когда автомобиль стоит, водитель получает полный доступ к нативному действию приложения Android, включая мультимедиа, например потоковое видео.

  • Как только автомобиль начинает движение, включаются функции защиты от отвлечения внимания. Приложение переключается на шаблон медиаконтента из библиотеки приложений для автомобилей, чтобы обеспечить непрерывное воспроизведение аудио в соответствии с правилами.

  • Мы находимся на пороге больших перемен в автомобильной индустрии.

  • Разработчики мультимедийных приложений хотят выйти за рамки традиционных интерфейсов для просмотра и воспроизведения, чтобы предложить водителям и пассажирам более насыщенные, захватывающие и интерактивные возможности.

  • Теперь мы рассмотрим пример того, как можно добавить нативное видео с помощью библиотеки Media3, чтобы оно начинало воспроизводиться, когда автомобиль переходит в режим парковки.

  • Для начала подключите поверхность рендеринга видео непосредственно к экземпляру фонового воспроизведения.

    override fun onStart() {
           super.onStart()
           ...
           controllerFuture = MediaController.Builder(
             this,
             sessionToken
           ).buildAsync()
    
           controllerFuture?.addListener({
               mediaController = controllerFuture?.get()
               playerView.player = mediaController
           }, ContextCompat.getMainExecutor(this))
    }
  • Вы хотите избежать создания экземпляра отдельного медиапроигрывателя внутри этого действия, а вместо этого хотите поддерживать центральный ExoPlayer или медиапроигрыватель в рамках вашей основной службы, например службы медиатеки Media3, обрабатывающей комбинированные аудио- и видеопотоки.

  • Поэтому во время движения, когда нет активного сервиса, проигрыватель декодирует только аудио. Но когда водители открывают видео на парковке, вы хотите подключить поверхность рендеринга непосредственно к проигрывателю базового сервиса.

  • При использовании Media3 mediaController реализует проигрыватель нативно, что позволяет напрямую назначать playerView, как показано здесь: playerView.player задается непосредственно в mediaController.

  • Затем нужно зарегистрировать нативную точку входа с помощью ParkedOnlyOnClickListener.

    val watchVideoAction = Action.Builder()
      .setTitle("Watch Video")
      .setIcon(videoCarIcon)
      .setOnClickListener(
        ParkedOnlyOnClickListener.create {
          val intent = Intent(
            carContext,
            VideoPlayerActivity::class.java
          )
            .apply {
              addFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK
              )
            }
          carContext.startActivity(intent)
        })
      .build()
  • Эта оболочка предоставляет триггер намерения в строке заголовка интерфейса воспроизведения медиаконтента.

  • Поэтому мы добавим действие для запуска воспроизведения видео, обернув его прослушиватель выбора в ParkedOnlyOnClickListener.

  • В режиме "На автомобиле" эти нажатия перехватываются основным приложением, которое показывает системное сообщение о безопасности. Таким образом, вы не сможете перейти на этот экран во время вождения. Но когда вы припаркуетесь, обратный вызов активирует startActivity в carContext, чтобы запустить назначенное полноэкранное действие.

  • Помните, что в манифесте таких приложений из библиотеки приложений нужно пометить целевое видео как distractionOptimized=false, чтобы операционная система распознала, что это рабочий процесс только для припаркованного автомобиля.

    <activity
       android:name=".VideoPlayerActivity"
       android:exported="false"
       android:launchMode="singleTop">
       <meta-data
           android:name="distractionOptimized"
           android:value="false" />
    </activity>

Переключение с парковки на движение

  • И наконец, давайте посмотрим, что происходит, когда водитель переключает передачу с парковки на движение.

  • Если приложение не оптимизировано для водителей и продолжает работать во время движения автомобиля, AAOS показывает системный оверлей с сообщением о том, что для продолжения работы с приложением нужно припарковаться.

  • Чтобы избежать этого, мы стремимся обеспечить плавный возврат к шаблону воспроизведения медиаконтента без прерывания звука.

  • Поэтому, когда isRequiresDistractionOptimization принимает значение true, мы очищаем поверхность рендеринга видео из базового сеанса мультимедиа и вызываем метод finish для действия проигрывателя, поскольку оно было запущено поверх CAL. Завершение этого действия возвращает пользователя непосредственно к шаблону воспроизведения мультимедиа и продолжает воспроизведение аудио.

    class VideoPlayerActivity : ComponentActivity(){
      override fun onStart() {
    
        …
    
        if (uxRestrictionsManager?
            .currentCarUxRestrictions?
            .isRequiresDistractionOptimization
                == true) {
          revertToCarAppTemplate()
        }
      }
    
      private fun revertToCarAppTemplate() {
        mediaControllerCompat
          .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                       null, null)
        finish()
      }
    }
  • Чтобы обеспечить непрерывное воспроизведение аудио, медиасеанс должен быть активной службой. Тогда звук будет воспроизводиться без перебоев при изменении состояния.

    <activity
            android:name="androidx.car.app.activity.CarAppActivity"
            android:exported="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    
            <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
        </intent-filter>
        <meta-data
                android:name="distractionOptimized"
                android:value="true" />
    </activity>
  • Вам также следует переопределить onNewIntent на экране CAL, чтобы фиксировать намерения SHOW_MEDIA_PLAYBACK.

    class MyCarAppSession : Session() {
        override fun onCreateScreen(intent: Intent): Screen {
            // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
            val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
            mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
    
            // 2. Handle deep link if cold-started from the vehicle's media widget
            handlePlaybackIntent(intent)
            return HomeScreen(carContext)
        }
        override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
    
            // 3. Handle deep link when the session is already running
            handlePlaybackIntent(intent)
        }
    }
  • Таким образом, когда пользователи взаимодействуют с медиавиджетом автомобильной системы на главном экране, ссылка на контент направляет их прямо в раздел "Что сейчас играет?" в библиотеке приложений Car App Library.

  • Поэтому проверять эти переходы в процессе разработки очень просто.

  • Вы можете выполнять команды adb в AAOS.

  • В данном случае это emulate-driving-state drive или emulate-driving-state park.

  • Вот пример нового приложения Media3, в котором используется библиотека Car App Library с воспроизведением видео в режиме парковки.

  • Посмотрите, как это работает, на нашем стенде адаптивного Android на нижнем этаже и в репозитории car-samples на GitHub.

  • Возможность переключения между режимами парковки и вождения сейчас доступна в Android Automotive OS для мультимедийных приложений, которые уже интегрированы с библиотекой Android для автомобилей. Теперь они могут предлагать больше функций, когда автомобиль припаркован.

  • Скоро на сайте developer.android.com появится документация по этой функции. Там же вы сможете сообщить, что хотите добавить ее в свое приложение.

  • Павел.

Что нового в библиотеке приложений для автомобилей

  • Отлично.

  • Спасибо, Томас.

  • Прежде чем закончить, я хочу рассказать вам, как узнать больше о том, что ждет нас в этом году.

  • Как упомянул Томас, CAL 1.9 сейчас находится на стадии альфа-тестирования.

  • Скоро она перейдет в статус бета-версии.

  • А до конца года мы выпустим альфа-версию CAL 1.10, чтобы вы могли оценить диалоговые интерфейсы и новейшие возможности связи и парковки.

  • И наконец, как я уже упоминал, игры теперь доступны в Android Auto и Android Automotive OS, так что сейчас самое время оптимизировать ваши игры для автомобилей.

  • Чтобы узнать больше о реализации, ознакомьтесь с руководством по созданию игр для автомобилей.

  • Узнайте, как адаптировать игры для автомобилей и что нового появилось в Android для автомобилей, на странице "Что нового".

  • Надеемся, вы убедились, что автомобили и их пользователи готовы к вашим приложениям.

  • Вы можете использовать существующие адаптивные приложения, чтобы создавать удобные интерфейсы для припаркованных автомобилей, и различные шаблоны из библиотеки Car App Library, чтобы создавать интерфейсы, оптимизированные для безопасного вождения.

  • Перед публикацией вы можете тщательно протестировать приложение с помощью Desktop Head Unit, эмуляторов, AAOS на Pixel Tablet или Firebase Test Lab.

  • У вас уже есть навыки, необходимые для разработки приложений для этой экосистемы, и миллионы автомобилей ждут ваших приложений. Давайте же выпустим их на дорогу!

Код

Фрагменты кода

Фрагмент кода Shell на 09:03 в видео "Разработка приложений для припаркованных автомобилей"
android skills list
android skills add android-for-cars-parked-apps
Фрагмент кода на Kotlin в разделе "Возможности для парковки и вождения"
override fun onStart() {
       super.onStart()
       ...
       controllerFuture = MediaController.Builder(
         this,
         sessionToken
       ).buildAsync()

       controllerFuture?.addListener({
           mediaController = controllerFuture?.get()
           playerView.player = mediaController
       }, ContextCompat.getMainExecutor(this))
}
Фрагмент кода на Kotlin в разделе "Функции для парковки и вождения" (16:06)
val watchVideoAction = Action.Builder()
  .setTitle("Watch Video")
  .setIcon(videoCarIcon)
  .setOnClickListener(
    ParkedOnlyOnClickListener.create {
      val intent = Intent(
        carContext,
        VideoPlayerActivity::class.java
      )
        .apply {
          addFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK
          )
        }
      carContext.startActivity(intent)
    })
  .build()
Фрагмент XML-кода на 16:42 в разделе "Возможности парковки"
<activity
   android:name=".VideoPlayerActivity"
   android:exported="false"
   android:launchMode="singleTop">
   <meta-data
       android:name="distractionOptimized"
       android:value="false" />
</activity>
Фрагмент кода на Kotlin в разделе "Обработка переходов из режима парковки в режим вождения"
class VideoPlayerActivity : ComponentActivity(){
  override fun onStart() {

    …

    if (uxRestrictionsManager?
        .currentCarUxRestrictions?
        .isRequiresDistractionOptimization
            == true) {
      revertToCarAppTemplate()
    }
  }

  private fun revertToCarAppTemplate() {
    mediaControllerCompat
      .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                   null, null)
    finish()
  }
}
Фрагмент XML-кода на 17:36 в разделе "Обработка переходов из режима парковки в режим вождения"
<activity
        android:name="androidx.car.app.activity.CarAppActivity"
        android:exported="true"
        android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
    </intent-filter>
    <meta-data
            android:name="distractionOptimized"
            android:value="true" />
</activity>
Фрагмент кода на Kotlin в разделе "Обработка переходов из режима парковки в режим вождения"
class MyCarAppSession : Session() {
    override fun onCreateScreen(intent: Intent): Screen {
        // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
        val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
        mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)

        // 2. Handle deep link if cold-started from the vehicle's media widget
        handlePlaybackIntent(intent)
        return HomeScreen(carContext)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        // 3. Handle deep link when the session is already running
        handlePlaybackIntent(intent)
    }
}