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

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

Важно. В автомобильной отрасли все действия, включая системные, во время вождения подпадают под ограничения пользовательского опыта. Если функция, которую вы хотите включить с помощью значка запуска, должна быть доступна во время вождения, добавьте её в разрешённый список (если вы являетесь производителем оригинального оборудования) или аннотируйте действие метаданными 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-обновления ) или через обновления приложений из магазина приложений.

Настройка

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