Przepływy integracyjne

Wyboru aktywnego VIA dokonuje się poprzez ManageAssistActivity w CarSettings. Ten przepływ jest wyzwalany przez aplikację PackageInstaller w ramach sekcji Aplikacje domyślne na ekranie Ustawienia.

Domyślne aplikacje na ekranie Ustawienia

Rysunek 1. Domyślne aplikacje na ekranie Ustawienia

Wybrany VIA jest udostępniany systemowi na dwa sposoby:

  1. W ramach usługi systemu RolesManager
  2. Przez usługę VoiceInteractionManagerService za pośrednictwem wewnętrznego interfejsu API AssistUtils .

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

Wywoływanie słów kluczowych

Android udostępnia AlwaysOnHotwordDetector jako abstrakcję na sprzęcie DSP. Zapewnia to wygodny sposób powiązania VoiceInteractionService z modelem głosu w celu zapewnienia ciągłego rozpoznawania głosu przy niskim zużyciu energii. Jest to najczęstszy i dobrze znany sposób interakcji, podczas którego użytkownik prosi o interakcję z aplikacją głosową (VA) w celu zainicjowania nowej konwersacji. Rozpoczęte w ten sposób sesje głosowe są oznaczone SHOW_SOURCE_ASSIST_GESTURE flag .

Wywoływanie słów kluczowych

Rysunek 2. Wywoływanie słów kluczowych

Legenda. Usługi systemowe są wyświetlane w kolorze jasnoniebieskim, komponenty VIA w kolorze zielonym.

Wyzwalanie PTT

Dotyczy to długiego lub krótkiego naciśnięcia przycisku sprzętowego. W AAOS PTT jest obsługiwane przez CarInputService . W domyślnej implementacji usługa ta obsługuje zdarzenia wejściowe odbierane przez HAL pojazdu i w konkretnym przypadku interakcji głosowej stosuje następującą logikę do kluczowych zdarzeń:

  • Krótkie zdarzenia PTT ( KeyEvent.KEYCODE_VOICE_ASSIST ) są kierowane do VoiceInteractionManagerService w celu rozpoczęcia nowej sesji głosowej.
  • Długie zdarzenia PTT są najpierw przekazywane do odbiorników projekcyjnych (na przykład Android Auto lub CarPlay), następnie do urządzeń podłączonych przez Bluetooth, a na końcu do lokalnej aplikacji VIA.

Sesje rozpoczęte przy użyciu tego przepływu są identyfikowane za pomocą SHOW_SOURCE_PUSH_TO_TALK .

Wyzwalanie PTT

Rysunek 3. Wyzwalanie PTT

Aby zintegrować sprzętowy przycisk sterowania głosowego z AAOS, zobacz Integracja wejścia kluczyka samochodowego .

Wyzwalanie metodą „dotknij i mów” (lub przycisk programowy)

Wyzwalanie interakcji głosowej z interfejsu użytkownika systemu odbywa się za pomocą AssistUtil . Jest to ukryty systemowy interfejs API, z którego mogą korzystać wyłącznie dołączone aplikacje systemowe, takie jak systemowy interfejs użytkownika, który umożliwia:

  • Interakcja z VoiceInteractionManagerService w celu rozpoczęcia sesji sterowania głosowego.
  • Określ, która jest aktualnie wybrana karta VIA.

Aby dynamicznie prezentować wybraną aplikację VIA, interfejs systemowy może używać RoleManager i śledzić zmiany w posiadaczu roli ROLE_ASSISTANT . Przykład implementacji wyzwalania TTT można znaleźć w CarSystemUI, AssistantButton .

Wyzwalanie poprzez dotknięcie i rozmowę

Rysunek 4. Wyzwalanie funkcji Tap-to-Talk

Asystent głosowy „Dotknij, aby przeczytać” (TTR)

W branży motoryzacyjnej powiadomienia wysyłane do Centrum powiadomień identyfikowane jako powiadomienia INBOX lub INBOX_IN_GROUP (na przykład wiadomości SMS) zawierają przycisk akcji Odtwórz, dzięki któremu użytkownik może przeczytać powiadomienia na głos przez wybrany VIA i opcjonalnie odpowiedzieć głosowo.

Powiadomienia

Rysunek 5. Powiadomienia

Więcej informacji na temat implementowania tego przepływu można znaleźć w sekcji Obsługa poleceń przesyłania wiadomości .

Uruchom VIA z wyrzutni samochodowej

Jak każda inna aplikacja, VIA może zawierać w swoim manifeście jedno lub więcej działań programu uruchamiającego. Decyzja o tym, jakie skutki przyniosą te działania, zależy od twórcy aplikacji i producenta OEM, którzy wyrażą zgodę na wstępną instalację tej aplikacji.

Ważny. W Automotive wszystkie czynności, w tym czynności systemowe, podlegają ograniczeniom UX podczas jazdy. Jeśli doświadczenie, które chcesz włączyć za pomocą ikony programu uruchamiającego, musi być dostępne podczas jazdy, dodaj je do listy dozwolonych (jeśli jesteś producentem OEM) lub opisz aktywność za pomocą metadanych distractionOptimized . Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące rozpraszania uwagi kierowcy .

DSP i dźwięk HAL

Pamiętaj, aby zapoznać się ze zaktualizowanymi wytycznymi dotyczącymi jednoczesnego, zawsze włączonego nagrywania dźwięku i HAL dźwięku w witrynie Przechwytywanie współbieżne . Dostęp do tych interfejsów API może mieć znaczący wpływ na skuteczność wykrywania słów-kluczy, jak wyjaśniono w sekcji Odpowiadanie na słowa-klucze .

Uprawnienia

Przyznaj uprawnienia uprzywilejowane systemowo

Biorąc pod uwagę, że użytkownik nie może udzielić uprzywilejowanych uprawnień, jeśli VIA potrzebuje któregokolwiek z nich, producenci OEM muszą wstępnie załadować swój pakiet APK do obrazów systemu i wyraźnie przyznać te uprawnienia w swoich kompilacjach. Zobacz Poproś o uprawnienia .

Aby to zrobić, dodaj do swojego projektu zależność listy dozwolonych uprawnień:

Android.bp

android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}

Dodaj plik uprawnień listy dozwolonych uprawnień systemu 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>

Niebezpieczne uprawnienia przed przyznaniem

Jak wskazano w sekcji Żądanie uprawnień , VIA wymaga zgody użytkownika na dostęp do niektórych funkcji. Niektóre z tych uprawnień są wstępnie przyznane domyślnej VoiceInteractionService (patrz DefaultPermissionGrantPolicy.java ). Aby uzyskać więcej informacji na temat uprawnień dla domyślnych programów obsługi, zobacz Uprawnienia używane tylko w domyślnych programach obsługi . Możliwe jest także wstępne nadanie uprawnień za pomocą pliku konfiguracyjnego default-permissions.xml . Aby uzyskać szczegółowe informacje na temat ograniczeń dotyczących wstępnego przyznawania uprawnień, zobacz sekcję 9 w dokumencie definicji zgodności systemu Android (CDD) .

Ważny. We wszystkich przypadkach tylko domyślna VIA miałaby te uprawnienia wstępnie przyznane. Jeśli w systemie jest wstępnie załadowanych więcej niż jedna karta VIA, inna niż domyślna karta VIA musi jawnie poprosić użytkownika o uprawnienia w ramach konfiguracji lub podczas pierwszego użycia.

Dystrybucja (instalacja wstępna i wdrażanie aktualizacji)

Preinstalowane karty VIA muszą znajdować się w partycjach i folderach /product/priv-apps lub /vendor/priv-apps (więcej informacji na temat partycji można znaleźć w artykule Przegląd partycji i Tworzenie partycji produktu ).

W drugim przypadku, biorąc pod uwagę, że partycję dostawcy można zaktualizować niezależnie od systemu, aplikacje hostowane tutaj nie będą mogły uzyskać dostępu do systemowych interfejsów API @hide. W zależności od lokalizacji preinstalowanych aplikacji aktualizacje mogą być przeprowadzane w formie OTA (patrz Aktualizacje OTA ) lub poprzez aktualizacje aplikacji ze sklepu z aplikacjami.

Dostosowywanie

Jak wspomniano w Koncepcje specyficzne dla branży motoryzacyjnej , spójność interfejsu użytkownika/UX i dostosowywanie są ważniejsze w branży motoryzacyjnej niż w jakimkolwiek innym formacie. Aby zapewnić maksymalną interoperacyjność, zdecydowanie zaleca się korzystanie z biblioteki AAOS Car UI . Ta biblioteka zawiera komponenty i zasoby, które można zintegrować z aplikacjami motoryzacyjnymi zaprojektowanymi z myślą o dostosowywaniu przez producentów OEM. W ten sposób można zbudować pojedynczy plik APK w taki sposób, aby jego interfejs użytkownika można było dostosować do projektu każdego modelu samochodu.