Procesy integracji

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.

Aplikacje domyślne na ekranie Ustawienia

Rysunek 1. Aplikacje domyślne na ekranie Ustawienia

Wybrany interfejs VIA jest udostępniany systemowi na 2 sposoby:

  1. W ramach RolesManagerusługi systemowej
  2. Za pomocą VoiceInteractionManagerService przez AssistUtilswewnętrzny interfejs API.

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

Aktywowanie słowem-kluczem

Android udostępnia klasę AlwaysOnHotwordDetector, która jest abstrakcją na DSP sprzętowym. Umożliwia to wygodne powiązanie VoiceInteractionService z modelem głosu w celu rozpoznawania głosu 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.

Aktywowanie słowem-kluczem

Rysunek 2. Aktywowanie słowem-kluczem

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

Aktywowanie PTT

Dotyczy to długiego i krótkiego 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 do VoiceInteractionManagerService, 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ą oznaczone symbolem SHOW_SOURCE_PUSH_TO_TALK.

Aktywowanie PTT

Rysunek 3. Aktywowanie 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 VoiceInteractionManagerService w 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.

Aktywowanie funkcji „Dotknij i mów”

Rysunek 4. Aktywowanie funkcji „Dotknij i mów”

Asystent głosowy – kliknij, aby przeczytać

W przypadku samochodów powiadomienia publikowane w centrum powiadomień, które są identyfikowane jako powiadomienia INBOX 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.

Powiadomienia

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 dźwięku

Zapoznaj się ze zaktualizowanymi wytycznymi dotyczącymi jednoczesnego ciągłego nagrywania dźwięku i interfejsu HAL audio w sekcji Jednoczesne nagrywanie. 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

Uprawnień o podwyższonych uprawnieniach nie może przyznać użytkownik. Jeśli VIA potrzebuje któregoś z nich, producenci OEM muszą wstępnie załadować plik APK do obrazów 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 przyznanie 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 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 CDD (Compatibility Definition Document) 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 artykule Omówienie partycjiTworzenie 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 fabrycznie zainstalowanych aplikacji aktualizacje mogą być przeprowadzane bezprzewodowo (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 wyposażenia. W ten sposób można utworzyć jeden plik APK, którego interfejs użytkownika można dostosować do projektu każdego modelu samochodu.