整合流程

活動 VIA 的選擇是由 CarSettings 中的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,請參閱汽車按鍵輸入整合。

Tap-to-Talk 觸發(或軟體按鈕)

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

  • VoiceInteractionManagerService互動以啟動語音控制會話。
  • 確定目前選擇的 VIA。

要動態呈現選定的 VIA 應用程序,系統 UI 可以使用RoleManager並追蹤ROLE_ASSISTANT角色持有者的變更。如何實現 TTT 觸發的範例可以在 CarSystemUI、 AssistantButton中找到。

點按通話觸發

圖 4. Tap-to-Talk 觸發

語音助理點擊閱讀 (TTR)

在汽車中,發佈到通知中心並標識為INBOXINBOX_IN_GROUP通知(例如 SMS 訊息)的通知包含一個「播放」操作按鈕,該按鈕允許用戶透過所選 VIA 大聲朗讀通知,並且可以選擇透過語音回覆。

通知

圖 5.通知

有關如何實現此流程的更多信息,請參閱處理訊息傳遞命令

從汽車啟動器啟動 VIA

與任何其他應用程式一樣,VIA 可以在其清單中包含一個或多個啟動器活動。由應用程式開發人員和 OEM 是否接受預先安裝此應用程式來決定這些活動的用途。

重要的。在汽車領域,駕駛時的所有活動(包括系統活動)都受到使用者體驗限制。如果您想要透過啟動器圖示啟用的體驗必須在駕駛時可用,請將其新增至允許清單(如果您是 OEM)或使用distractionOptimized元資料註解該活動。有關更多信息,請參閱駕駛員分心指南

DSP 和音訊 HAL

請務必查看並發捕獲中有關並發始終在線音頻錄製和音頻 HAL 的更新指南。存取這些 API 可能會對熱詞偵測的效能產生重大影響,如回應熱詞所述。

權限

授予系統特權

鑑於使用者無法授予特權權限,如果 VIA 需要其中任何權限,OEM 必須在其係統映像中預先載入其 APK,並在其建置中明確授予這些權限。請參閱請求權限

為此,請為您的專案新增權限白名單依賴項:

Android.bp

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

將系統權限白名單權限檔案加入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分區和資料夾下(有關分區的更多信息,請參閱分區概述建置產品分區)。

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

客製化

正如汽車特定概念中所提到的,UI/UX 一致性和客製化在汽車中比任何其他外形因素都更重要。為了最大程度地實現互通性,強烈建議使用 AAOS Car UI 庫。該庫包含可整合到由 OEM 定制的汽車應用程式中的元件和資源。這樣,就可以建造單一 APK,使其 UI 可以根據每種車型的設計進行客製化。