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

Выбор активного 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)

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

Уведомления

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

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

Запуск через Car Launcher

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

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

DSP и аудио HAL

Обязательно ознакомьтесь с обновленными рекомендациями, касающимися параллельной постоянной записи аудио и аудио HAL на странице Concurrent Capture . Доступ к этим 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. Эта библиотека включает компоненты и ресурсы, которые можно интегрировать в автомобильные приложения, предназначенные для индивидуальной настройки OEM-производителями. Таким образом, один APK может быть создан таким образом, чтобы его пользовательский интерфейс можно было адаптировать к дизайну каждой модели автомобиля.