Выбор активного VIA осуществляется с помощью ManageAssistActivity в настройках автомобиля. Этот процесс запускается приложением PackageInstaller в разделе «Приложения по умолчанию» на экране настроек.

Рисунок 1. Приложения по умолчанию на экране настроек.
Выбранный VIA предоставляется системе двумя способами:
- В рамках системной службы
RolesManager - Через службу
VoiceInteractionManagerServiceи внутренний APIAssistUtils.
Список потенциальных VIA можно получить с помощью RolesManager , используя имя роли android.app.role.ASSISTANT .
активация ключевого слова
Android предоставляет AlwaysOnHotwordDetector в качестве абстракции поверх аппаратного DSP. Это обеспечивает удобный способ связать VoiceInteractionService с голосовой моделью для энергоэффективного постоянно включенного распознавания голоса. Это наиболее распространенный и известный сценарий взаимодействия, когда пользователь запрашивает взаимодействие с голосовым приложением (VA) для начала нового разговора. Голосовые сессии, начатые таким образом, идентифицируются SHOW_SOURCE_ASSIST_GESTURE flag .
Рисунок 2. Срабатывание по ключевому слову.
Легенда. Системные службы обозначены светло-голубым цветом, компоненты VIA — зелёным.
срабатывание PTT
Это относится к длительному или короткому нажатию аппаратной кнопки. В AAOS обработка PTT осуществляется службой CarInputService . В стандартной реализации эта служба обрабатывает входные события, полученные через HAL автомобиля, и в частности, в случае голосового взаимодействия она применяет следующую логику к событиям нажатия клавиш:
- Короткие события PTT (
KeyEvent.KEYCODE_VOICE_ASSIST) направляются вVoiceInteractionManagerServiceдля начала новой голосовой сессии. - Длительные события PTT сначала передаются на проекционные приемники (например, Android Auto или CarPlay), затем на устройства, подключенные по Bluetooth, и, наконец, в локальное приложение VIA.
Сеансы, запущенные с использованием этого процесса, идентифицируются с помощью SHOW_SOURCE_PUSH_TO_TALK .

Рисунок 3. Запуск PTT.
Для интеграции аппаратной кнопки голосового управления в AAOS см. раздел «Интеграция автомобильного ключа» .
Функция «Нажми и говори» (или программная кнопка)
Запуск голосового взаимодействия из системного интерфейса осуществляется с помощью AssistUtil . Это скрытый системный API, который может использоваться только встроенными системными приложениями, такими как системный интерфейс, который обеспечивает:
- Взаимодействие с
VoiceInteractionManagerServiceдля запуска сеансов голосового управления. - Определите, какой из VIA в данный момент выбран.
Для динамического отображения выбранного приложения VIA пользовательский интерфейс системы может использовать RoleManager и отслеживать изменения в роли пользователя ROLE_ASSISTANT . Пример реализации запуска TTT можно найти в CarSystemUI, AssistantButton .

Рисунок 4. Запуск функции «Нажми и говори».
Голосовой помощник Tap-to-Read (TTR)
В автомобильной сфере уведомления, отправляемые в Центр уведомлений и помеченные как уведомленияINBOX или INBOX_IN_GROUP (например, SMS-сообщения), содержат кнопку действия «Воспроизвести», которая позволяет пользователю озвучить уведомления выбранным VIA и, при желании, ответить голосом. 
Рисунок 5. Уведомления
Для получения дополнительной информации о том, как реализовать этот процесс, см. раздел «Обработка команд обмена сообщениями» .
Запуск VIA с помощью автомобильной пусковой установки
Как и любое другое приложение, VIAs могут включать в свой манифест одно или несколько действий запуска. Разработчик приложения и производитель, согласившийся на предварительную установку этого приложения, сами решают, что будут делать эти действия.
Важно. В автомобильной сфере все действия, включая системные, во время вождения подлежат ограничениям пользовательского интерфейса. Если функция, которую вы хотите активировать с помощью значка запуска, должна быть доступна во время вождения, добавьте ее в список разрешенных (если вы являетесь производителем оборудования) или добавьте к действию метаданные distractionOptimized . Для получения дополнительной информации см. Руководство по предотвращению отвлечения внимания водителя .
DSP и аудио HAL
Обязательно ознакомьтесь с обновленными рекомендациями по одновременной непрерывной записи звука и использованию аудио HAL в разделе «Одновременный захват ». Доступ к этим API может существенно повлиять на производительность распознавания ключевых слов, как описано в разделе «Реагирование на ключевые слова» .
Разрешения
Предоставить системным пользователям привилегированные права доступа
Поскольку пользователь не может предоставить привилегированные разрешения, если VIA требуется какое-либо из них, производители оборудования должны предварительно загрузить свой APK-файл в образы системы и явно предоставить эти разрешения в своих сборках. См. раздел «Запрос разрешений» .
Для этого добавьте в свой проект зависимость, содержащую список разрешенных привилегий:
Android.bp
android_app {
...
required: ["privapp_allowlist_com.example.myvoicecontrol"],
...
} Добавьте файл разрешений system-privacy allowlist в папку yourdata/etc/car :
vendor/…/data/etc/car/Android.bp
prebuilt_etc { name:privapp_allowlist_com.example.myvoicecontrol", sub_dir: "permissions", src: "com.example.myvoicecontrol.xml", filename_from_src: true, }
vendor/…/data/etc/car/com.example.myvoicecontrol.xml
<?xml version="1.0" encoding="utf-8"?> <permissions> <privapp-permissions package="com.android.car.voicecontrol"> <permission name="android.permission.MEDIA_CONTENT_CONTROL"/> </privapp-permissions> </permissions>
Опасные разрешения, выданные до их предоставления.
Как указано в разделе «Запрос разрешений» , VIA требует согласия пользователя для доступа к определенным функциям. Некоторые из этих разрешений предварительно предоставлены службе VoiceInteractionService по умолчанию (см. DefaultPermissionGrantPolicy.java ). Дополнительную информацию о разрешениях для обработчиков по умолчанию см. в разделе «Разрешения, используемые только в обработчиках по умолчанию» . Также можно предварительно предоставить разрешения с помощью файла конфигурации default-permissions.xml . Подробную информацию об ограничениях, касающихся предварительного предоставления разрешений, см. в разделе 9 документа Android Compatibility Definition Document (CDD) .
Важно. Во всех случаях эти разрешения будут предварительно предоставлены только для VIA по умолчанию. Если в системе предустановлено более одного VIA, то VIA, не являющийся VIA по умолчанию, должен явно запросить у пользователя необходимые разрешения в процессе настройки или при первом использовании.
Распространение (предварительная установка и развертывание обновлений)
Предустановленные VIA-файлы должны располагаться в разделах и папках /product/priv-apps или /vendor/priv-apps (подробнее о разделах см. в разделах «Обзор разделов» и «Создание разделов продукта »).
Во втором случае, учитывая, что раздел поставщика может обновляться отдельно от системного, приложения, размещенные здесь, не смогут получить доступ к системным API @hide. В зависимости от расположения предустановленных приложений, обновления могут выполняться по воздуху (см. обновления по воздуху ) или через обновления приложений из магазина приложений.
Настройка
Как уже упоминалось в разделе «Концепции, специфичные для автомобильной отрасли» , согласованность пользовательского интерфейса и возможности персонализации в автомобильной сфере важнее, чем в любом другом форм-факторе. Для обеспечения максимальной совместимости настоятельно рекомендуется использовать библиотеку AAOS Car UI . Эта библиотека включает компоненты и ресурсы, которые могут быть интегрированы в автомобильные приложения, предназначенные для персонализации производителями автомобилей. Таким образом, можно создать один APK-файл, пользовательский интерфейс которого можно адаптировать к дизайну каждой модели автомобиля.