集成流程

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

設置屏幕上的默認應用

圖 1.設置屏幕上的默認應用

選定的 VIA 以兩種方式暴露給系統:

  1. 作為RolesManager系統服務的一部分
  2. VoiceInteractionManagerService通過AssistUtils內部 API。

可以使用角色名稱為android.app.role.ASSISTANTRolesManager獲取候選 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標識。

PTT 觸發

圖 3. PTT 觸發

要將硬件語音控制按鈕集成到 AAOS,請參閱汽車按鍵輸入集成。

點擊通話觸發(或軟件按鈕)

從系統 UI 觸發語音交互是使用AssistUtil完成的。這是一個隱藏的系統 API,只能由捆綁的系統應用程序使用,例如啟用以下功能的系統 UI:

  • VoiceInteractionManagerService交互以啟動語音控制會話。
  • 確定哪個是當前選定的 VIA。

為了動態呈現選定的 VIA 應用程序,系統 UI 可以使用RoleManager並跟踪ROLE_ASSISTANT角色持有者的更改。可以在 CarSystemUI, AssistantButton中找到如何實現 TTT 觸發的示例。

點擊通話觸發

圖 4.點擊通話觸發

語音助手點擊閱讀 (TTR)

在汽車中,發佈到通知中心的通知被標識為INBOXINBOX_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 ImagesBuilding Product Partitions )。

在第二種情況下,鑑於供應商分區可以與系統分開更新,此處託管的應用程序將無法訪問@hide 系統 API。根據預安裝應用程序的位置,更新可以作為 OTA(請參閱OTA 更新)或通過應用商店中的應用程序更新來執行。

定制

正如汽車特定概念中所述,UI/UX 的一致性和定制在汽車中比在任何其他形式因素中都更重要。為獲得最大的互操作性,強烈建議使用 AAOS Car UI 庫。該庫包含可集成到專為 OEM 定制的汽車應用程序的組件和資源。通過這種方式,單個 APK 可以以某種方式構建,使其 UI 可以根據每個車型的設計進行定制。