在繼續之前,請先查看駕駛分心指南。
本頁介紹汽車使用者體驗 (UX) 限制規則,您可以使用它來建立多個 UX 限制規則配置(例如,歐盟與日本),然後確定在運行時套用哪一組規則。有關更多信息,請參閱CarUxRestrictions 。
Car UX Restrictions 服務可讓開發人員定義新的 Car UX Restrictions 配置。如果開發者想要修改限制規則(例如遵守當地的安全標準),開發者可以使用API來定義新的配置。
用於設定配置的 API 僅保留在新配置中。也就是說,配置不會立即生效。相反,當 UX 限制服務重新啟動且汽車處於停車狀態時,會載入新配置。汽車服務確保汽車在重新加載新配置之前處於停車狀態。
除了新的 UX Restrictions 服務方法之外,還提供 API 來建立配置。檔位選擇和速度狀態轉換為三種駕駛狀態之一:
- 停車。公園裡的齒輪。
- 空轉。齒輪不在駐車檔且速度為零。
- 移動。齒輪不在駐車檔且速度不為零。
若要了解應用程式如何使用汽車的駕駛狀態以及相應的 UX 限制,請參閱使用汽車駕駛狀態和 UX 限制。
基於驅動器狀態的限製配置
為了防止駕駛分心,Android 將駕駛狀態對應到一組 UX 限制
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
- 停車。不受限制。
- 空轉。沒有視頻,也沒有配置螢幕。
- 移動。完全限制(所有限制都是必需的)。
上面所示的對應是預先決定的並配置為 XML 資源。這
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
然後將規則儲存在記憶體中。然後,該服務將當前駕駛狀態對應到 UX 限制,並將目前限制廣播到整個系統。<!-- No restrictions when car is parked --> <DrivingState car:state="parked"> <Restrictions car:requiresDistractionOptimization="false" car:uxr="baseline"/> </DrivingState> <!-- Restrictions when car is idling --> <DrivingState car:state="idling"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video|no_config"/> </DrivingState> <!-- Restrictions for speed >= 0 m/s --> <DrivingState car:state="moving" car:minSpeed="0.0"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="fully_restricted"/> </DrivingState>
多個顯示器的配置
預設情況下,對其他顯示器沒有任何限制。若要為多個顯示器建立限製配置,請在該顯示器的實體連接埠中包含RestrictionMapping
標記。適當的限制會自動套用於每個顯示。在以下範例中,實體連接埠 ID 1 和 2 的顯示器具有不同的配置:
<RestrictionMapping car:physicalPort="1"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/> </DrivingState> </RestrictionMapping> <RestrictionMapping car:physicalPort="2"> <DrivingState car:state="moving"> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </RestrictionMapping>
限制模式配置
您可以為模式選擇任何名稱,例如teen 。在以下範例中,為預設模式和乘客模式配置了不同的限制(之前僅支援乘客模式):
<DrivingState car:state="idling"> <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/> <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/> </DrivingState> </Restrictions>您可以使用 API 為模式設定任何字串名稱。例如,CarUxRestrictionsManager 中的
setRestrictionMode(@NonNull String mode)
方法。 (以前,您可以在 CarUxRestrictionsManager 中使用setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode)
方法)。CarUxRestrictionsConfiguration API
CarUxRestrictionsConfiguration 的限制
新類別CarUxRestrictionsConfiguration
按 1:1 對應到目前 XML 配置架構。 CarUxRestrictionsConfiguration
可以使用CarUxRestrictions. Builder
,它在 build() 時驗證配置。
new CarUxRestrictionsConfiguration.Builder() // Explicitly set restrictions for each driving state. .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED, /* requiresOptimization= */ false, /* restrictions= */ UX_RESTRICTIONS_BASELINE) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING, true, UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP) .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING, true, UX_RESTRICTIONS_FULLY_RESTRICTED) // Set restriction parameters. .setMaxStringLength(int max) .setMaxCumulativeContentItems(int max) .setMaxContentDepth(int max) // Build a new CarUxRestrictionsConfiguration. .build();
CarUxRestrictionsManager API
使用CarUxRestrictionsManager
設定下一個磁碟機的CarUxRestrictionsConfiguration
。此方法需要權限Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION
。
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot( CarUxRestrictionsConfiguration config);
保留新的 UX 限製配置
當傳入新配置時,UX Restrictions 服務會傳回一個布林值來指示新配置是否已成功儲存。這種新配置僅在整合主機 (IHU) 重新啟動且汽車停車時使用。在內部,UX 限制服務包含兩組配置:
- 生產。雖然是可選的,但這種配置經常存在。 UX 限制服務在啟動時讀取此配置。
- 上演了。同樣可選的是,此配置對 UX 限制沒有影響,並且在汽車服務啟動和汽車停車時升級為生產。
圖 1.生產配置
解決故障
在從 CarPropertyManager 收到駕駛狀態資訊之前(例如,在啟動期間),不會強制執行 UX 限制。系統的運作就像駕駛狀態為「停車」一樣。
如果讀取已儲存的組態失敗(例如,SettingNotFoundException 結果),UX 限制服務將回退到硬編碼的完全限制模式:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
駕駛狀態和使用者限制
以下內容描述了以下設計圖中顯示的交互作用:
圖 2.駕駛狀態交互
用於導出駕駛狀態的屬性
使用以下三個VehiclePropertyIds
來匯出駕駛狀態:
應用程式可用的 API
程式碼位於以下位置:
若要模擬駕駛狀態,請參閱測試。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2024-04-29 (世界標準時間)。