Выбор активного VIA осуществляется с помощью ManageAssistActivity
в CarSettings. Этот поток запускается приложением PackageInstaller
как часть раздела Default apps экрана Settings.
Рисунок 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 . В реализации по умолчанию эта служба обрабатывает события ввода, полученные через Vehicle HAL, и в конкретном случае голосового взаимодействия она применяет следующую логику к ключевым событиям:
- Короткие события PTT (
KeyEvent.KEYCODE_VOICE_ASSIST
) направляются вVoiceInteractionManagerService
для начала нового голосового сеанса. - Длительные события PTT сначала передаются на проекционные приемники (например, Android Auto или CarPlay), затем на устройства, подключенные по Bluetooth, и, наконец, в локальное приложение VIA.
Сеансы, начатые с использованием этого потока, идентифицируются с помощью SHOW_SOURCE_PUSH_TO_TALK
.
Рисунок 3. Запуск PTT
Чтобы интегрировать аппаратную кнопку голосового управления в AAOS, см. раздел Интеграция автомобильного ключа .
Активация Tap-to-Talk (или программной кнопки)
Запуск голосового взаимодействия из системного пользовательского интерфейса осуществляется с помощью AssistUtil . Это скрытый системный API, который может использоваться только связанными системными приложениями, такими как системный пользовательский интерфейс, который позволяет:
- Взаимодействие с
VoiceInteractionManagerService
для запуска сеансов голосового управления. - Определите, какой VIA выбран в данный момент.
Для динамического представления выбранного приложения VIA системный пользовательский интерфейс может использовать RoleManager
и отслеживать изменения в держателе роли для ROLE_ASSISTANT
. Пример реализации запуска TTT можно найти в CarSystemUI, AssistantButton
.
Рисунок 4. Запуск функции Tap-to-Talk
Голосовой помощник Tap-to-Read (TTR)
В автомобильной промышленности уведомления, отправляемые в Центр уведомлений и идентифицируемые как уведомленияINBOX
или INBOX_IN_GROUP
(например, SMS-сообщения), включают кнопку действия «Воспроизвести», которая позволяет пользователю прослушивать уведомления выбранным VIA и, при желании, отвечать голосом. Рисунок 5. Уведомления
Дополнительную информацию о том, как реализовать этот процесс, см. в разделе Обработка команд обмена сообщениями .
Запустить VIA с автомобильного пускового устройства
Как и любое другое приложение, VIA могут включать в свой манифест одно или несколько действий запуска. Разработчик приложения и OEM, соглашающийся на предварительную установку этого приложения, должны решить, что будут делать эти действия.
Важно. В автомобильной отрасли все действия, включая системные действия, подлежат ограничениям UX во время вождения. Если опыт, который вы хотите включить с помощью значка запуска, должен быть доступен во время вождения, добавьте его в список разрешенных (если вы OEM) или аннотируйте действие метаданными distractionOptimized
. Для получения дополнительной информации см. Рекомендации по отвлечению внимания водителя .
DSP и аудио HAL
Обязательно ознакомьтесь с обновленными рекомендациями относительно параллельной записи звука и аудио HAL в Concurrent capture . Доступ к этим API может оказать значительное влияние на производительность обнаружения горячих слов, как описано в Responding to hotwords .
Разрешения
Предоставить системные привилегированные разрешения
Учитывая, что привилегированные разрешения не могут быть предоставлены пользователем, если VIA нуждается в них, OEM-производители должны предварительно загрузить свои APK в свои системные образы и явно предоставить эти разрешения в своих сборках. См. Запрос разрешений .
Для этого добавьте в свой проект зависимость списка разрешенных привилегий:
Android.bp
android_app { ... required: ["privapp_allowlist_com.example.myvoicecontrol"], ... }
Добавьте файл разрешений списка разрешений системы в папку 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 должны находиться в разделах и папках /product/priv-apps
или /vendor/priv-apps
(подробнее о разделах см. в разделах Обзор разделов и Сборка разделов продукта ).
Во втором случае, учитывая, что раздел поставщика может обновляться отдельно от системы, приложения, размещенные здесь, не смогут получить доступ к API системы @hide. В зависимости от расположения предустановленных приложений, обновления могут выполняться как OTA (см. Обновления OTA ) или через обновления приложений из магазина приложений.
Настройка
Как упоминалось в Automotive-specific concepts , согласованность UI/UX и настройка более важны в автомобильной отрасли, чем в любом другом форм-факторе. Для максимальной совместимости настоятельно рекомендуется использовать библиотеку AAOS Car UI . Эта библиотека включает компоненты и ресурсы, которые можно интегрировать в автомобильные приложения, разработанные для настройки OEM-производителями. Таким образом, один APK может быть создан таким образом, что его пользовательский интерфейс можно настроить под дизайн каждой модели автомобиля.