Wybór aktywnego VIA jest dokonywany przez ManageAssistActivity
w CarSettings. Ten proces jest uruchamiany przez aplikację PackageInstaller
w ramach sekcji Aplikacje domyślne na ekranie Ustawienia.
Rysunek 1. Aplikacje domyślne na ekranie Ustawienia
Wybrany identyfikator VIA jest udostępniany systemowi na 2 sposoby:
- W ramach usługi
RolesManager
system - przez
VoiceInteractionManagerService
za pomocą wewnętrznego interfejsu APIAssistUtils
.
Listę kandydatów do VIA można uzyskać za pomocą funkcji RolesManager
z nazwą roli android.app.role.ASSISTANT
.
Aktywowanie słowa-klucza
Android udostępnia klasę AlwaysOnHotwordDetector jako abstrakcję na potrzeby sprzętowego procesora DSP. Dzięki temu możesz łatwo powiązać VoiceInteractionService
z modelem rozpoznawania mowy w trybie niskiego zużycia energii. Jest to najpopularniejszy i najbardziej znany schemat interakcji, w którym użytkownik prosi o interaktywność z aplikacją głosową (VA), aby rozpocząć nową rozmowę. Sesje głosowe rozpoczęte w ten sposób są oznaczane jako SHOW_SOURCE_ASSIST_GESTURE flag
.
Rysunek 2. Aktywowanie słów-kluczy
Legenda. Usługi systemowe są oznaczone na jasnoniebiesko, a komponenty VIA na zielono.
Aktywacja PTT
Dotyczy to długiego i krótkiego naciśnięcia przycisku sprzętowego. W AAOS funkcja PTT jest obsługiwana przez CarInputService. W domyślnej implementacji ta usługa obsługuje zdarzenia wejściowe otrzymywane przez interfejs HAL pojazdu, a w szczególnym przypadku interakcji głosowej stosuje do kluczowych zdarzeń następującą 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 odbiornikom projekcji (np. Android Auto lub CarPlay), a potem urządzeniom połączonym przez Bluetooth i w końcu do lokalnej aplikacji VIA.
Sesje rozpoczęte za pomocą tego procesu są oznaczane symbolem SHOW_SOURCE_PUSH_TO_TALK
.
Rysunek 3. Aktywacja PTT
Aby zintegrować przycisk sterowania głosem z AAOS, zapoznaj się z informacjami o integracji Automotive Key Input.
Funkcja Dotknij i mów (lub przycisk programowy)
Interakcje głosowe w interfejsie systemu są wywoływane za pomocą AssistUtil. Jest to ukryty interfejs API systemu, z którego mogą korzystać tylko wbudowane aplikacje systemowe, takie jak interfejs użytkownika systemu, który umożliwia:
- Interakcja z
VoiceInteractionManagerService
w celu rozpoczęcia sesji sterowania głosem. - Określ, która z nich jest obecnie wybrana.
Aby dynamicznie wyświetlić wybraną aplikację VIA, interfejs systemu może używać RoleManager
i śledzić zmiany w roli ROLE_ASSISTANT
.
Przykład implementacji funkcji uruchamiania TTT można znaleźć w CarSystemUI, AssistantButton
.
Rysunek 4. Aktywowanie funkcji „Dotknij i mów”
Asystent głosowy – funkcja „Kliknij, aby przeczytać” (TTR)
W systemach samochodowych powiadomienia publikowane w centrum powiadomień o typieINBOX
lub INBOX_IN_GROUP
(np. SMS-y) zawierają przycisk Odtwórz, który umożliwia użytkownikowi odsłuchanie powiadomienia przez wybrane urządzenie VIA. Można też za pomocą głosu odpowiedzieć na powiadomienie.
Rysunek 5. Powiadomienia
Więcej informacji o wdrażaniu tego procesu znajdziesz w artykule Przetwarzanie poleceń w wiadomościach.
Uruchamianie VIA z menu uruchamiającego w samochodzie
Podobnie jak inne aplikacje, VIA może zawierać w swoim pliku manifestu co najmniej 1 aktywność w wywołaczu. To deweloper aplikacji i OEM decydują o tym, jakie działania będą wykonywane przez wstępnie zainstalowaną aplikację.
Ważne. W przypadku Automotive wszystkie działania, w tym działania systemu, podlegają ograniczeniom związanym z UX podczas jazdy. Jeśli funkcja, którą chcesz włączyć za pomocą ikony w menu, musi być dostępna podczas jazdy, dodaj ją do listy dozwolonych (jeśli jesteś producentem OEM) lub dodaj do niej adnotacje za pomocą metadanych distractionOptimized
. Więcej informacji znajdziesz w wytycznych dotyczących rozpraszania uwagi kierowcy.
DSP i HAL audio
Zapoznaj się z aktualnymi wytycznymi dotyczącymi jednoczesnego nagrywania dźwięku w trybie zawsze włączonym i interfejsu audio HAL w artykule Jednoczesne rejestrowanie. Dostęp do tych interfejsów API może mieć znaczący wpływ na skuteczność wykrywania słów kluczowych, jak wyjaśniono w artykule Reagowanie na słowa kluczowe.
Uprawnienia
Przyznawanie uprawnień uprzywilejowanego systemu
Uprawnienia o podwyższonych uprawnieniach nie mogą być przyznawane przez użytkownika, więc jeśli VIA potrzebuje któregoś z nich, producenci OEM muszą wstępnie załadować plik APK w obrazach systemu i przyznawać te uprawnienia w ramach swoich kompilacji. 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ń do 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>
Przyznawanie uprawnień niebezpiecznych
Jak wskazano w prośbie o przyznanie uprawnień, VIA wymaga zgody użytkownika na dostęp do niektórych funkcji. Niektóre z tych uprawnień są przyznawane domyślnie 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ż przyznać uprawnienia z wyprzedzeniem, używając pliku konfiguracji default-permissions.xml
. Szczegółowe informacje o ograniczeniach dotyczących wstępnego przyznawania uprawnień znajdziesz w sekcji 9
dokumentu zdefiniowania zgodności (CDD) na temat Androida.
Ważne. We wszystkich przypadkach te uprawnienia byłyby przyznawane tylko domyślnej wersji interfejsu VIA. Jeśli w systemie jest więcej niż 1 wstępnie załadowana VIA, VIA inna niż domyślna musi wyraźnie poprosić użytkownika o przyznanie uprawnień podczas konfiguracji lub pierwszego użycia.
dystrybucja (wstępne instalowanie i wdrażanie aktualizacji);
Wstępnie zainstalowane VIA muszą znajdować się w particjach i folderach /product/priv-apps
lub /vendor/priv-apps
(więcej informacji o particjach znajdziesz w artykule Omówienie partycji i Tworzenie partycji w produkcie).
W drugim przypadku, ponieważ partycja dostawcy może być aktualizowana niezależnie od systemu, aplikacje hostowane na tej partycji 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 w ramach OTA (patrz aktualizacje OTA) lub za pomocą aktualizacji aplikacji ze sklepu z aplikacjami.
Dostosowywanie
Jak wspomniano w artykule Pojęcia związane z motoryzacją, spójność i dostosowywanie interfejsu użytkownika są w przypadku motoryzacji ważniejsze niż w przypadku innych formuł. Aby zapewnić maksymalną interoperacyjność, zdecydowanie zalecamy korzystanie z biblioteki interfejsu Car UI w AAOS. Biblioteka ta zawiera komponenty i zasoby, które można zintegrować z aplikacją samochodową, aby umożliwić jej dostosowanie przez producentów OEM. Dzięki temu można skompilować 1 plik APK w taki sposób, aby jego interfejs był dostosowywany do projektu każdego modelu samochodu.