整合流程

系統會透過 CarSettings 中的 ManageAssistActivity 選取有效的 VIA。這個流程是由「設定」畫面「預設應用程式」專區中的 PackageInstaller 應用程式觸發。

「設定」畫面上的預設應用程式

圖 1. 「設定」畫面上的預設應用程式

所選 VIA 會透過兩種方式向系統公開:

  1. 做為RolesManager系統服務的一部分
  2. 透過 AssistUtils 內部 API 的 VoiceInteractionManagerService

您可以使用 RolesManager 搭配角色名稱 android.app.role.ASSISTANT,取得候選 VIA 清單。

啟動字詞觸發

Android 提供 AlwaysOnHotwordDetector,做為硬體 DSP 的抽象層。這項功能可讓您輕鬆將 VoiceInteractionService 與語音模型建立關聯,以進行低功耗的語音辨識。這是最常見且廣為人知的互動流程,使用者要求與語音應用程式 (VA) 互動,發起新的對話。以這種方式啟動的語音工作階段會以 SHOW_SOURCE_ASSIST_GESTURE flag 標示。

啟動字詞觸發

圖 2. 啟動字詞觸發

傳奇。系統服務會以淺藍色顯示,VIA 元件則以綠色顯示。

PTT 觸發

無論是長按或短按硬體按鈕,都適用這項設定。在 AAOS 中,PTT 由 CarInputService 處理。在預設實作中,這項服務會處理透過車輛 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 變更。如要瞭解如何實作 TTT 觸發程序,請參閱 CarSystemUI 中的 AssistantButton

輕觸即可說話的觸發方式

圖 4. 輕觸即可說話的觸發方式

語音助理輕觸朗讀 (TTR)

在 Automotive 中,發布至通知中心的通知 (識別為 INBOXINBOX_IN_GROUP 通知,例如簡訊) 會包含「播放」動作按鈕,讓使用者透過選取的 VIA 朗讀通知,並視需要透過語音回覆。

通知

圖 5. 通知

如要進一步瞭解如何實作這項流程,請參閱「處理訊息指令」。

透過車輛啟動器啟動 VIA

與其他應用程式一樣,VIA 可以在資訊清單中加入一或多個啟動器活動。應用程式開發人員和接受預先安裝這項應用程式的原始設備製造商,可自行決定這些活動的用途。

重要事項:在 Automotive 中,所有活動 (包括系統活動) 都會受到行車時的使用者體驗限制。如要透過啟動器圖示啟用體驗,且該體驗必須在開車時可用,請將其新增至允許清單 (如果您是原始設備製造商),或使用 distractionOptimized 中繼資料註解活動。詳情請參閱駕駛人分心守則

DSP 和音訊 HAL

請務必參閱「同步擷取」一文,瞭解有關同步持續錄音和音訊 HAL 的更新版指南。如「回應熱字」一文所述,存取這些 API 可能會大幅影響熱字偵測效能。

權限

授予系統特殊權限

由於使用者無法授予這類權限,如果 VIA 需要任何一項權限,原始設備製造商必須在系統映像檔中預先載入 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。