活動 VIA 的選擇是由 CarSettings 中的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,請參閱汽車按鍵輸入整合。
Tap-to-Talk 觸發(或軟體按鈕)
使用AssistUtil從系統 UI 觸發語音互動。這是一個隱藏的系統 API,只能由捆綁的系統應用程式使用,例如啟用以下功能的系統 UI:
- 與
VoiceInteractionManagerService
互動以啟動語音控制會話。 - 確定目前選擇的 VIA。
要動態呈現選定的 VIA 應用程序,系統 UI 可以使用RoleManager
並追蹤ROLE_ASSISTANT
角色持有者的變更。如何實現 TTT 觸發的範例可以在 CarSystemUI、 AssistantButton
中找到。
圖 4. Tap-to-Talk 觸發
語音助理點擊閱讀 (TTR)
在汽車中,發佈到通知中心並標識為INBOX
或INBOX_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 可以根據每種車型的設計進行客製化。