Wybór aktywnego interfejsu VIA odbywa się w ManageAssistActivity. 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 interfejs VIA jest udostępniany systemowi na 2 sposoby:
- W ramach
RolesManagerusługi systemowej - Za pomocą
VoiceInteractionManagerServiceprzezAssistUtilswewnętrzny interfejs API.
Listę kandydatów na VIA można uzyskać za pomocą polecenia RolesManager
z nazwą roli android.app.role.ASSISTANT.
Aktywacja słowem-kluczem
Android udostępnia klasę AlwaysOnHotwordDetector jako abstrakcję na DSP sprzętowym. Umożliwia to wygodne powiązanie VoiceInteractionService z modelem głosowym w celu ciągłego rozpoznawania mowy przy niskim zużyciu energii. Jest to najczęstszy i najbardziej znany przepływ interakcji, w którym użytkownik prosi o interakcję z aplikacją głosową, aby rozpocząć nową rozmowę. Sesje głosowe rozpoczęte w ten sposób są oznaczone symbolem SHOW_SOURCE_ASSIST_GESTURE flag.

Rysunek 2. Aktywacja słowem-kluczem
Legenda. Usługi systemowe są oznaczone jasnoniebieskim kolorem, a komponenty VIA – zielonym.
Aktywacja PTT
Dotyczy to krótkiego i długiego naciśnięcia przycisku sprzętowego. W AAOS funkcją PTT zarządza CarInputService. W domyślnej implementacji ta usługa obsługuje zdarzenia wejściowe otrzymywane przez HAL pojazdu. W przypadku interakcji głosowej stosuje ona do kluczowych zdarzeń tę logikę:
- 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), a następnie do urządzeń połączonych przez Bluetooth i w końcu do lokalnej aplikacji VIA.
Sesje rozpoczęte w ten sposób są oznaczane symbolem SHOW_SOURCE_PUSH_TO_TALK.

Rysunek 3. Aktywacja PTT
Aby zintegrować sprzętowy przycisk sterowania głosowego z AAOS, zapoznaj się z informacjami o integracji Automotive Key Input.
Wyzwalanie funkcji „Dotknij, aby mówić” (lub przycisk programowy)
Wywoływanie interakcji głosowej z poziomu interfejsu systemu odbywa się za pomocą klasy AssistUtil. Jest to ukryty interfejs API systemu, który może być używany tylko przez aplikacje systemowe, takie jak interfejs systemu, który umożliwia:
- interakcja z
VoiceInteractionManagerServicew celu rozpoczęcia sesji sterowania głosem; - Sprawdź, która VIA jest obecnie wybrana.
Aby dynamicznie prezentować wybraną aplikację VIA, interfejs systemu może używać
RoleManager
i śledzić zmiany dotyczące posiadacza roli w przypadku ROLE_ASSISTANT.
Przykład implementacji wywoływania TTT znajdziesz w CarSystemUI, AssistantButton.

Rysunek 4. Aktywowanie funkcji „Dotknij i mów”
Asystent głosowy – funkcja kliknij, aby przeczytać (TTR)
W przypadku samochodów powiadomienia publikowane w Centrum powiadomień, które są identyfikowane jako powiadomieniaINBOX lub INBOX_IN_GROUP (np. SMS-y), zawierają przycisk działania Odtwórz, który umożliwia użytkownikowi odczytanie powiadomień na głos przez wybranego asystenta VIA i opcjonalnie odpowiedzenie na nie głosowo.

Rysunek 5. Powiadomienia
Więcej informacji o wdrażaniu tego procesu znajdziesz w artykule Obsługa poleceń wiadomości.
Uruchamianie VIA z menu z aplikacjami w samochodzie
Podobnie jak inne aplikacje, aplikacje VIA mogą zawierać w swoim manifeście co najmniej 1 aktywność uruchamiającą. To deweloper aplikacji i producent OEM, który zgadza się na wstępną instalację tej aplikacji, decydują o tym, jakie działania będzie ona wykonywać.
Ważne: W przypadku Automotive wszystkie działania, w tym działania systemowe, podlegają ograniczeniom UX podczas jazdy. Jeśli funkcja, którą chcesz włączyć za pomocą ikony programu uruchamiającego, musi być dostępna podczas jazdy, dodaj ją do listy dozwolonych (jeśli jesteś producentem OEM) lub dodaj do aktywności metadane distractionOptimized. Więcej informacji znajdziesz w wytycznych dotyczących rozpraszania uwagi kierowcy.
Procesor DSP i warstwa HAL audio
Zapoznaj się ze zaktualizowanymi wytycznymi dotyczącymi jednoczesnego ciągłego nagrywania dźwięku i warstwy 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 kluczowych, co wyjaśniono w artykule Reagowanie na słowa kluczowe.
Uprawnienia
Przyznawanie uprawnień systemowych
Użytkownik nie może przyznać uprawnień o podwyższonym dostępie. Jeśli VIA potrzebuje któregokolwiek z nich, producenci OEM muszą wstępnie załadować plik APK w obrazach systemu i wyraźnie przyznać te uprawnienia w swoich kompilacjach. Zobacz Prośba o uprawnienia.
Aby to zrobić, dodaj do projektu zależność 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 uprawnień niebezpiecznych
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 przyznane domyślnemu 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. Możesz też wstępnie przyznać uprawnienia za pomocą default-permissions.xmlpliku konfiguracji. Szczegółowe informacje o ograniczeniach dotyczących wstępnego przyznawania uprawnień znajdziesz w sekcji 9
dokumentu definicji zgodności (CDD) na Androida.
Ważne: We wszystkich przypadkach tylko domyślny asystent VIA będzie miał wstępnie przyznane te uprawnienia. Jeśli system ma więcej niż 1 wstępnie załadowanego asystenta VIA, asystent inny niż domyślny musi wyraźnie poprosić użytkownika o przyznanie uprawnień w ramach konfiguracji lub podczas pierwszego użycia.
Dystrybucja (wstępna instalacja i wdrażanie aktualizacji)
Preinstalowane VIA muszą znajdować się w partycjach i folderach /product/priv-apps lub /vendor/priv-apps (więcej informacji o partycjach znajdziesz w artykułach Omówienie partycji i Tworzenie partycji produktu).
W drugim przypadku, ponieważ partycja dostawcy może być aktualizowana oddzielnie od systemu, aplikacje hostowane w tym miejscu nie będą miały dostępu do interfejsów API systemu @hide. W zależności od lokalizacji preinstalowanych aplikacji aktualizacje mogą być przeprowadzane w ramach OTA (patrz aktualizacje OTA) lub za pomocą aktualizacji aplikacji ze sklepu z aplikacjami.
Dostosowywanie
Jak wspomnieliśmy w sekcji Pojęcia związane z motoryzacją, spójność i możliwość dostosowania interfejsu użytkownika są ważniejsze w przypadku motoryzacji niż w przypadku innych urządzeń. Aby zapewnić maksymalną interoperacyjność, zdecydowanie zalecamy korzystanie z biblioteki interfejsu użytkownika samochodu AAOS. Ta biblioteka zawiera komponenty i zasoby, które można zintegrować z aplikacjami samochodowymi zaprojektowanymi z myślą o dostosowywaniu przez producentów oryginalnego sprzętu. Dzięki temu można utworzyć jeden plik APK, którego interfejs użytkownika można dostosować do projektu każdego modelu samochodu.