激活 VIA 的選擇由ManageAssistActivity中的 ManageAssistActivity 完成。此流程由PackageInstaller應用程序觸發,作為設置屏幕的默認應用程序部分的一部分。 

圖 1.設置屏幕上的默認應用
選定的 VIA 以兩種方式暴露給系統:
- 作為
RolesManager系統服務的一部分 - 由
VoiceInteractionManagerService通過AssistUtils內部 API。 
可以使用角色名稱為android.app.role.ASSISTANT的RolesManager獲取候選 VIA 列表。
啟動指令觸發
Android 提供AlwaysOnHotwordDetector作為硬件 DSP 之上的抽象。這提供了一種將VoiceInteractionService與語音模型相關聯的便捷方式,以實現低能耗的始終在線語音識別。這是最常見和眾所周知的交互流程,用戶請求與語音應用程序 (VA) 交互以發起新對話。以這種方式啟動的語音會話由SHOW_SOURCE_ASSIST_GESTURE flag標識。

圖 2.啟動指令觸發
傳奇。系統服務以淺藍色顯示,VIA 組件以綠色顯示。
PTT 觸發
這適用於長按或短按硬件按鈕。在 AAOS 中,PTT 由CarInputService處理。在默認實現中,此服務處理通過 Vehicle HAL 接收的輸入事件,在語音交互的特定情況下,它將以下邏輯應用於關鍵事件:
- 短 PTT 事件 ( 
KeyEvent.KEYCODE_VOICE_ASSIST) 被定向到VoiceInteractionManagerService以啟動新的語音會話。 - 長 PTT 事件首先傳遞給投影接收器(例如,Android Auto 或 CarPlay),然後傳遞給藍牙連接的設備,最後傳遞給本地 VIA 應用程序。
 
使用此流程啟動的會話使用SHOW_SOURCE_PUSH_TO_TALK標識。

圖 3. PTT 觸發
要將硬件語音控制按鈕集成到 AAOS,請參閱汽車按鍵輸入集成。
點擊通話觸發(或軟件按鈕)
從系統 UI 觸發語音交互是使用AssistUtil完成的。這是一個隱藏的系統 API,只能由捆綁的系統應用程序使用,例如啟用以下功能的系統 UI:
- 與
VoiceInteractionManagerService交互以啟動語音控制會話。 - 確定哪個是當前選定的 VIA。
 
為了動態呈現選定的 VIA 應用程序,系統 UI 可以使用RoleManager並跟踪ROLE_ASSISTANT角色持有者的更改。可以在 CarSystemUI, AssistantButton中找到如何實現 TTT 觸發的示例。

圖 4.點擊通話觸發
語音助手點擊閱讀 (TTR)
在汽車中,發佈到通知中心的通知被標識為INBOX或INBOX_IN_GROUP通知(例如,SMS 消息)將包括一個播放操作按鈕,該按鈕允許用戶讓所選 VIA 大聲朗讀通知,並可選擇通過語音回复.
圖 5.通知
有關如何實現此流程的更多信息,請參閱處理消息命令。
從 Car Launcher 啟動 VIA
與任何其他應用程序一樣,VIA 可以在其清單中包含一個或多個啟動器活動。由應用程序開發人員和接受預安裝此應用程序的 OEM 來決定這些活動將做什麼。
重要的。在汽車中,包括系統活動在內的所有活動在駕駛時都受到用戶體驗限制。如果您希望通過啟動器圖標啟用的體驗必須在駕駛時可用,請將其添加到允許列表(如果您是 OEM)或使用distractionOptimized優化元數據註釋活動。有關更多信息,請參閱駕駛員分心指南。
DSP 和音頻 HAL
請務必在Concurrent Capture中查看有關並發始終在線音頻錄製和音頻 HAL 的更新指南。訪問這些 API 可能會對熱門詞檢測的性能產生重大影響,如響應熱門詞中所述。
權限
授予系統特權權限
鑑於用戶無法授予特權權限,如果 VIA 需要其中任何一個,OEM 必須在其係統映像中預加載其 APK,並在其構建中明確授予這些權限。請參閱請求權限。
為此,請向您的項目添加權限許可列表依賴項:
 Android.bp
android_app {
     ...
     required: ["privapp_allowlist_com.example.myvoicecontrol"],
     ...
}
將 system-privilege 白名單權限文件添加到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>
危險的權限預授權
如請求權限中所述,VIA 需要用戶同意才能訪問某些功能。其中一些權限已預先授予默認VoiceInteractionService (請參閱DefaultPermissionGrantPolicy.java )。有關默認處理程序權限的更多信息,請參閱 僅在默認處理程序中使用的權限。也可以使用default-permissions.xml配置文件預先授予權限。有關預先授予權限的限制的詳細信息,請參閱 Android兼容性定義文檔 (CDD)中的第 9 節。
重要的。在所有情況下,只有默認的 VIA 會預先授予這些權限。如果系統預加載了多個 VIA,則非默認 VIA 必須在設置過程中或首次使用時明確向用戶請求權限。
分發(預安裝和部署更新)
預安裝的 VIA 必須位於/product/priv-apps或/vendor/priv-apps分區和文件夾下(有關分區的更多信息,請參見Partitions and Images和Building Product Partitions )。
在第二種情況下,鑑於供應商分區可以與系統分開更新,此處託管的應用程序將無法訪問@hide 系統 API。根據預安裝應用程序的位置,更新可以作為 OTA(請參閱OTA 更新)或通過應用商店中的應用程序更新來執行。
定制
正如汽車特定概念中所述,UI/UX 的一致性和定制在汽車中比在任何其他形式因素中都更重要。為獲得最大的互操作性,強烈建議使用 AAOS Car UI 庫。該庫包含可集成到專為 OEM 定制的汽車應用程序的組件和資源。通過這種方式,單個 APK 可以以某種方式構建,使其 UI 可以根據每個車型的設計進行定制。