系統會透過 CarSettings 中的 ManageAssistActivity
選取有效的 VIA。這個流程是由 PackageInstaller
應用程式觸發,是「設定」畫面「預設應用程式」部分的一部分。
圖 1. 「設定」畫面上的預設應用程式
系統會以兩種方式公開所選的 VIA:
RolesManager
系統服務的一部分- 透過
AssistUtils
內部 API 的VoiceInteractionManagerService
。
您可以使用 RolesManager
搭配角色名稱 android.app.role.ASSISTANT
,取得候選 VIA 清單。
啟動字詞觸發
Android 提供 AlwaysOnHotwordDetector,做為硬體 DSP 的抽象層。這麼做可讓您輕鬆將 VoiceInteractionService
與語音模型建立關聯,以便在低耗電量情況下持續進行語音辨識。這是最常見且廣為人知的互動流程,使用者會要求與語音應用程式 (VA) 互動,以便發起新對話。以這種方式啟動的語音工作階段會標示為 SHOW_SOURCE_ASSIST_GESTURE flag
。
圖 2. 啟動字詞觸發
圖例。系統服務會以淺藍色顯示,VIA 元件則會以綠色顯示。
按傳話觸發
這適用於長按或短按硬體按鈕的情況。在 AAOS 中,PTT 由 CarInputService 處理。在預設實作中,這項服務會處理透過 Vehicle HAL 接收的輸入事件,並在語音互動等特殊情況下,將下列邏輯套用至重要事件:
- 短 PTT 事件 (
KeyEvent.KEYCODE_VOICE_ASSIST
) 會導向VoiceInteractionManagerService
,以開始新的語音工作階段。 - 長按 PTT 事件會先交給投影接收器 (例如 Android Auto 或 CarPlay),然後交給藍牙連線裝置,最後交給本機 VIA 應用程式。
使用這個流程啟動的會話會標示為 SHOW_SOURCE_PUSH_TO_TALK
。
圖 3. 按傳話觸發
如要將硬體語音控制按鈕整合至 AAOS,請參閱「Automotive Key Input」整合說明。
輕觸觸發 (或軟體按鈕)
使用 AssistUtil 即可透過系統 UI 觸發語音互動。這是一個隱藏的系統 API,只能由內含的系統應用程式使用,例如啟用下列功能的系統 UI:
- 與
VoiceInteractionManagerService
互動,啟動語音控制工作階段。 - 判斷目前選取的 VIA。
如要動態呈現所選的 VIA 應用程式,系統 UI 可以使用 RoleManager
,並追蹤 ROLE_ASSISTANT
的角色持有者變更。如需實作 TTT 觸發事件的範例,請參閱 CarSystemUI AssistantButton
。
圖 4. 輕觸即可開始說話的觸發功能
語音助理輕觸朗讀 (TTR)
在 Automotive 中,發布至 Notification Center 的通知會標示為INBOX
或 INBOX_IN_GROUP
通知 (例如簡訊),並包含播放動作按鈕,讓使用者透過所選的 VIA 朗讀通知,並視需要透過語音回覆。圖 5. 通知
如要進一步瞭解如何實作此流程,請參閱「處理訊息指令」。
透過車輛啟動器啟動 VIA
如同其他應用程式,VIA 可以在資訊清單中加入一或多個啟動器活動。應用程式開發人員和接受預先安裝此應用程式的原始設備製造商 (OEM) 會決定這些活動的執行方式。
重要事項:在 Automotive 中,所有活動 (包括系統活動) 都會受到行車時的 UX 限制。如果您希望在行車時啟動圖示可啟用體驗,請將該體驗加入許可清單 (如果您是 OEM),或是使用 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>
危險權限預先授予
如要求權限所述,使用者必須同意才能存取特定功能。其中部分權限會預先授予預設 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 可依各車款的設計進行自訂。