Интеграционные потоки

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

Приложения по умолчанию на экране настроек

Рисунок 1. Приложения по умолчанию на экране настроек.

Выбранный VIA доступен системе двумя способами:

  1. В составе системного сервиса RolesManager
  2. С помощью VoiceInteractionManagerService через внутренний API AssistUtils .

Список кандидатов 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 .

Запуск PTT

Рисунок 3. Запуск PTT

Чтобы интегрировать аппаратную кнопку голосового управления в AAOS, см. раздел «Интеграция ввода автомобильных ключей» .

Запуск Tap-to-Talk (или программной кнопки)

Запуск голосового взаимодействия из пользовательского интерфейса системы осуществляется с помощью AssistUtil . Это скрытый системный API, который может использоваться только встроенными системными приложениями, такими как системный пользовательский интерфейс, который позволяет:

  • Взаимодействие с VoiceInteractionManagerService для запуска сеансов голосового управления.
  • Определите, какой VIA выбран в данный момент.

Чтобы динамически представить выбранное приложение VIA, системный пользовательский интерфейс может использовать RoleManager и отслеживать изменения владельца роли для ROLE_ASSISTANT . Пример реализации запуска TTT можно найти в CarSystemUI, AssistantButton .

Запуск функции Tap-to-Talk

Рисунок 4. Запуск функции Tap-to-Talk

Голосовой помощник Tap-to-Read (TTR)

В автомобильной отрасли уведомления, публикуемые в Центре уведомлений и идентифицируемые как уведомления INBOX или INBOX_IN_GROUP (например, SMS-сообщения), включают кнопку действия «Воспроизвести», которая позволяет пользователю читать уведомления вслух выбранным VIA и, при необходимости, отвечать голосом.

Уведомления

Рисунок 5. Уведомления

Дополнительные сведения о реализации этого потока см. в разделе Обработка команд обмена сообщениями .

Запуск VIA из автомобильного лаунчера

Как и любое другое приложение, VIA может включать в свой манифест одно или несколько действий запуска. Разработчик приложения и OEM-производитель, согласившиеся на предварительную установку этого приложения, должны решить, что будут делать эти действия.

Важный. В автомобильной отрасли на все действия, включая системные, распространяются UX-ограничения во время вождения. Если функция, которую вы хотите включить с помощью значка панели запуска, должна быть доступна во время вождения, либо добавьте ее в белый список (если вы являетесь OEM-производителем), либо добавьте к этому действию метаданные, distractionOptimized . Дополнительную информацию см. в разделе Рекомендации по отвлечению внимания водителей .

DSP и аудио HAL

Обязательно ознакомьтесь с обновленными рекомендациями относительно одновременной непрерывной записи звука и HAL звука на странице «Конкурентный захват» . Доступ к этим API может оказать существенное влияние на производительность обнаружения горячих слов, как описано в разделе «Реагирование на горячие слова» .

Разрешения

Предоставление системных привилегий

Учитывая, что привилегированные разрешения не могут быть предоставлены пользователем, если 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 (CDD) .

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

Распространение (предварительная установка и развертывание обновлений)

Предустановленные VIA должны находиться в разделах и папках /product/priv-apps или /vendor/priv-apps (подробнее о разделах см. в разделах «Обзор разделов» и «Создание разделов продукта» ).

Во втором случае, поскольку раздел поставщика может обновляться отдельно от системы, размещенные здесь приложения не смогут получить доступ к системным API @hide. В зависимости от местоположения предустановленных приложений обновления могут выполняться через OTA (см. OTA-обновления ) или через обновления приложений из магазина приложений.

Кастомизация

Как упоминалось в разделе «Концепции, специфичные для автомобильной промышленности» , согласованность и настройка пользовательского интерфейса и пользовательского интерфейса более важны в автомобильной промышленности, чем в любом другом форм-факторе. Для максимальной совместимости настоятельно рекомендуется использовать библиотеку AAOS Car UI . Эта библиотека включает компоненты и ресурсы, которые можно интегрировать в автомобильные приложения, предназначенные для настройки OEM-производителями. Таким образом, можно создать один APK-файл таким образом, чтобы его пользовательский интерфейс можно было настроить в соответствии с дизайном каждой модели автомобиля.