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.

Rysunek 1. Aplikacje domyślne na ekranie Ustawienia
Wybrany VIA jest udostępniany systemowi na 2 sposoby:
- W ramach usługi systemowej
RolesManager. - Przez
VoiceInteractionManagerServiceza pomocąAssistUtilswewnę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.
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 doVoiceInteractionManagerService, 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.

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
VoiceInteractionManagerServicew 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.

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 jakoINBOX 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.

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.