Procesy integracji

Wybór aktywnego VIA odbywa się w ManageAssistActivity w CarSettings. Ten proces jest wywoływany przez aplikację PackageInstaller w ramach sekcji Aplikacje domyślne na ekranie Ustawienia.

Aplikacje domyślne na ekranie Ustawienia

Rysunek 1. Aplikacje domyślne na ekranie Ustawienia

Wybrany VIA jest udostępniany systemowi na 2 sposoby:

  1. W ramach usługi systemowej RolesManager .
  2. Przez VoiceInteractionManagerService za pomocą AssistUtils wewnętrznego interfejsu API.

Listę kandydatów na VIA można uzyskać za pomocą RolesManager z nazwą roli android.app.role.ASSISTANT.

Wywoływanie słowa-klucza

Android udostępnia AlwaysOnHotwordDetector jako abstrakcję na sprzętowym procesorze DSP. Umożliwia to wygodne powiązanie VoiceInteractionService z modelem głosu na potrzeby rozpoznawania głosu w trybie ciągłego nasłuchiwania przy niskim zużyciu energii. Jest to najczęstszy i najbardziej znany proces interakcji, w którym użytkownik prosi o interakcję z aplikacją głosową (VA), aby rozpocząć nową rozmowę. Sesje głosowe rozpoczęte w ten sposób są identyfikowane za pomocą SHOW_SOURCE_ASSIST_GESTURE flag.

Aktywacja słowem-kluczem

Rysunek 2. Wywoływanie słowa-klucza

Legenda. Usługi systemowe są oznaczone jasnoniebieskim kolorem, a komponenty VIA – zielonym.

Wywoływanie PTT

Dotyczy to długiego lub krótkiego naciśnięcia przycisku na urządzeniu. W AAOS PTT jest obsługiwane przez CarInputService. W domyślnej implementacji ta usługa obsługuje zdarzenia wejściowe otrzymywane przez interfejs HAL pojazdu, a w przypadku interakcji głosowej stosuje następującą logikę do zdarzeń klawiszy:

  • Krótkie zdarzenia PTT (KeyEvent.KEYCODE_VOICE_ASSIST) są kierowane do VoiceInteractionManagerService, aby rozpocząć nową sesję głosową.
  • Długie zdarzenia PTT są najpierw przekazywane do odbiorników projekcji (np. Android Auto lub CarPlay), potem do urządzeń połączonych przez Bluetooth, a na końcu do lokalnej aplikacji VIA.

Sesje rozpoczęte w ten sposób są identyfikowane za pomocą SHOW_SOURCE_PUSH_TO_TALK.

Aktywacja PTT

Rysunek 3. Wywoływanie PTT

Aby zintegrować sprzętowy przycisk sterowania głosem z AAOS, zapoznaj się z artykułem Integracja danych wejściowych klawiszy w samochodzie.

Wywoływanie Tap-to-Talk (lub przycisku programowego)

Wywoływanie interakcji głosowej z interfejsu systemu odbywa się za pomocą AssistUtil. Jest to ukryty interfejs API systemu, z którego mogą korzystać tylko aplikacje systemowe, takie jak interfejs systemu, który umożliwia:

  • interakcję z VoiceInteractionManagerService w celu rozpoczęcia sesji sterowania głosem;
  • określenie, który VIA jest obecnie wybrany.

Aby dynamicznie prezentować wybraną aplikację VIA, interfejs systemu może używać RoleManager i śledzić zmiany w posiadaczu roli dla ROLE_ASSISTANT. Przykład implementacji wywoływania TTT znajdziesz w CarSystemUI, AssistantButton.

Aktywowanie funkcji „Kliknij i mów”

Rysunek 4. Wywoływanie Tap-to-Talk

Asystent głosowy Tap-to-Read (TTR)

W Automotive powiadomienia publikowane w Centrum powiadomień, które są identyfikowane jako INBOX lub INBOX_IN_GROUP powiadomienia (np. wiadomości SMS) zawierają przycisk działania Odtwórz, który umożliwia użytkownikowi odczytywanie powiadomień przez wybrany VIA i opcjonalnie odpowiadanie głosem.

Powiadomienia

Rysunek 5. Powiadomienia

Więcej informacji o implementacji tego procesu znajdziesz w artykule Obsługa poleceń dotyczących wiadomości.

Uruchamianie VIA z menu z aplikacjami w samochodzie

Podobnie jak w przypadku innych aplikacji, VIA mogą zawierać w swoim pliku manifestu co najmniej 1 aktywność uruchamiającą. Deweloper aplikacji i producent OEM, który zgodził się na wstępną instalację tej aplikacji, decydują o tym, co te aktywności będą robić.

Ważne. W Automotive wszystkie aktywności, w tym aktywności systemowe, podlegają ograniczeniom UX podczas jazdy. Jeśli funkcja, którą chcesz włączyć za pomocą ikony programu uruchamiającego, ma być dostępna podczas jazdy, dodaj ją do listy dozwolonych (jeśli jesteś producentem OEM) lub oznacz aktywność metadanymi distractionOptimized. Więcej informacji znajdziesz w wytycznych dotyczących rozpraszania uwagi kierowcy.

Procesor DSP i HAL audio

Zapoznaj się z zaktualizowanymi wytycznymi dotyczącymi jednoczesnego nagrywania dźwięku w trybie ciągłego nasłuchiwania i HAL audio w sekcji Jednoczesne przechwytywanie. Dostęp do tych interfejsów API może mieć znaczący wpływ na skuteczność wykrywania słów-kluczy jak opisano w sekcji Reagowanie na słowa-klucze.

Uprawnienia

Przyznawanie uprawnień systemowych

Ponieważ użytkownik nie może przyznać uprawnień z podwyższonymi uprawnieniami, jeśli VIA ich potrzebuje, producenci OEM muszą wstępnie załadować plik APK do obrazów systemu i wyraźnie przyznać te uprawnienia w swoich kompilacjach. Zapoznaj się z sekcją Prośba o uprawnienia.

Aby to zrobić, dodaj do projektu zależność od listy dozwolonych uprawnień:

Android.bp

android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}

Dodaj plik uprawnień listy dozwolonych uprawnień systemowych do folderu 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>

Wstępne przyznawanie niebezpiecznych uprawnień

Jak wskazano w sekcji Prośba o uprawnienia, VIA wymaga zgody użytkownika na dostęp do niektórych funkcji. Niektóre z tych uprawnień są wstępnie przyznawane domyślnej VoiceInteractionService (patrz DefaultPermissionGrantPolicy.java). Więcej informacji o uprawnieniach domyślnych modułów obsługi znajdziesz w artykule Uprawnienia używane tylko w domyślnych modułach obsługi. Uprawnienia można też wstępnie przyznawać za pomocą default-permissions.xml pliku konfiguracyjnego. Szczegółowe informacje o ograniczeniach dotyczących wstępnego przyznawania uprawnień znajdziesz w sekcji 9 dokumentu definicji zgodności (CDD) Androida.

Ważne. W każdym przypadku tylko domyślny VIA będzie miał wstępnie przyznane te uprawnienia. Jeśli w systemie jest wstępnie załadowany więcej niż 1 VIA, VIA inny niż domyślny musi wyraźnie poprosić użytkownika o uprawnienia w ramach konfiguracji lub podczas pierwszego użycia.

Dystrybucja (wstępna instalacja i wdrażanie aktualizacji)

Wstępnie zainstalowane VIA muszą znajdować się w partycjach i folderach /product/priv-apps lub /vendor/priv-apps (więcej informacji o partycjach znajdziesz w sekcjach Omówienie partycji i Tworzenie partycji produktu).

W drugim przypadku, ponieważ partycja dostawcy może być aktualizowana niezależnie od systemu, aplikacje hostowane w tym miejscu nie będą mogły uzyskiwać dostępu do interfejsów API systemu @hide. W zależności od lokalizacji wstępnie zainstalowanych aplikacji aktualizacje mogą być przeprowadzane jako OTA (patrz Aktualizacje OTA) lub za pomocą aktualizacji aplikacji ze sklepu z aplikacjami.

Dostosowywanie

Jak wspomnieliśmy w sekcji Koncepcje specyficzne dla Automotive, spójność interfejsu i dostosowywanie są w Automotive ważniejsze niż w przypadku innych urządzeń. Aby zapewnić maksymalną interoperacyjność, zdecydowanie zalecamy korzystanie z biblioteki Car UI AAOS . Ta biblioteka zawiera komponenty i zasoby, które można zintegrować z aplikacjami samochodowymi zaprojektowanymi tak, aby można je było dostosowywać do potrzeb producentów OEM. Dzięki temu można utworzyć jeden plik APK w taki sposób, aby jego interfejs można było dostosować do wyglądu każdego modelu samochodu.