Procesy integracji

Wybór aktywnego VIA jest dokonywany przez ManageAssistActivityw CarSettings. Ten proces jest uruchamiany 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 identyfikator VIA jest udostępniany systemowi na 2 sposoby:

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

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 najczęstszy i najbardziej znany sposób interakcji, w którym użytkownik prosi o wykonanie czynności w aplikacji głosowej (VA), aby rozpocząć nową rozmowę. Sesje głosowe rozpoczęte w ten sposób są oznaczane jako SHOW_SOURCE_ASSIST_GESTURE flag.

Aktywowanie słowa-klucza

Rysunek 2. Aktywowanie słowa-klucza

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 do VoiceInteractionManagerService, aby rozpocząć nową sesję głosową.
  • Długie zdarzenia PTT są najpierw przekazywane odbiornikom projekcyjnym (np. Android Auto lub CarPlay), a potem urządzeniom połączonym przez Bluetooth i w końcu lokalnej aplikacji VIA.

Sesje rozpoczęte za pomocą tego procesu są oznaczane symbolem SHOW_SOURCE_PUSH_TO_TALK.

Aktywacja PTT

Rysunek 3. Aktywacja PTT

Aby zintegrować przycisk sterowania głosem z AAOS, zapoznaj się z informacjami o integracji Automotive Key Input.

Dotknij, aby mówić (lub przycisk oprogramowania)

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 użytkownika może używać RoleManageri śledzić zmiany w roli ROLE_ASSISTANT. Przykład implementacji wywołania TTT można znaleźć w CarSystemUI, AssistantButton.

Aktywowanie funkcji „Dotknij i mów”

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 typie INBOX 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. Użytkownik może też odpowiedzieć głosem.

Powiadomienia

Rysunek 5. Powiadomienia

Więcej informacji o wdrażaniu tego procesu znajdziesz w artykule Przetwarzanie poleceń w wiadomościach.

Uruchamianie VIA z menu z aplikacjami

Podobnie jak inne aplikacje, aplikacje typu VIA mogą zawierać w swoim pliku manifestu co najmniej 1 aktywność w inicjatorze. 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ć z 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 warstwy HAL dźwięku

Zapoznaj się ze zaktualizowanymi wytycznymi dotyczącymi jednoczesnego nagrywania dźwięku w trybie zawsze włączonym i interfejsu audio HAL w sekcji 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ń systemowych

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ść od 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 przyznawania uprawnień przed uruchomieniem aplikacji 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 API. Jeśli w systemie jest więcej niż 1 wstępnie zainstalowana VIA, VIA inna niż domyślna musi wyraźnie poprosić użytkownika o przyznanie uprawnień podczas konfiguracji lub pierwszego użycia.

dystrybucja (wstępna instalacja 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 partycjiPartycje w kompilacji).

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 @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 wspomnieliśmy 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 form czynników. Aby zapewnić maksymalną interoperacyjność, zdecydowanie zalecamy korzystanie z biblioteki interfejsu Car UI AAOS. Ta biblioteka zawiera komponenty i zasoby, które można zintegrować z aplikacją samochodową, aby umożliwić jej dostosowanie przez producentów OEM. W ten sposób można skompilować 1 plik APK w taki sposób, aby jego interfejs był dostosowywany do projektu każdego modelu samochodu.