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

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

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

Рисунок 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 . В реализации по умолчанию эта служба обрабатывает события ввода, полученные через Vehicle 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 в 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 может быть создан таким образом, что его пользовательский интерфейс можно настроить под дизайн каждой модели автомобиля.