在繼續之前,請查看駕駛分心指南。
本文介紹汽車用戶體驗 (UX) 限制規則,您可以使用這些規則創建多個 UX 限制規則配置(例如,歐盟與日本),然後確定在運行時應用哪組規則。有關詳細信息,請參閱CarUxRestrictions 。
Car UX Restrictions 服務使開發人員能夠定義新的 Car UX Restrictions 配置。如果開發者想要修改限制規則(例如符合當地的安全標準),開發者可以使用 API 來定義新的配置。
用於設置配置的 API 僅保留在新配置中。也就是說,配置不會立即生效。相反,當 UX Restrictions 服務重新啟動並且汽車處於停車位時,會加載新配置。汽車服務確保汽車在重新加載新配置之前處於停放狀態。
除了新的 UX Restrictions 服務方法之外,還提供了 API 來構建配置。檔位選擇和速度狀態轉換為三種駕駛狀態之一:
- 停車。公園裡的裝備。
- 空轉。檔位不在駐車檔且速度為零。
- 移動。檔位不在駐車檔且速度不為零。
要了解應用程序如何使用汽車的駕駛狀態和相應的 UX 限制,請參閱消耗汽車駕駛狀態和 UX 限制。
基於驅動器狀態的限製配置
為了防止駕駛員分心,Android 將駕駛狀態映射到一組用戶體驗限制 (UX Restriction) 規則(有關限制列表,請參閱attrs.xml )。考慮以下示例規則:
- 停車。不受限制。
- 空轉。沒有視頻,也沒有配置屏幕。
- 移動。完全受限(所有限制都是必需的)。
上面說明的映射是預先確定的並配置為 XML 資源。配置記錄在car_ux_restrictions_map中。在內部, CarUxRestrictionsManagerService在初始化期間解析規則,然後將規則保存在內存中。然後,該服務將當前駕駛狀態映射到 UX Restrictions 並將當前限制廣播到整個系統。
<!-- 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)方法)。CarUxRestrictions 配置 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
CarUxRestrictionsConfiguration為下一個驅動器設置CarUxRestrictionsManager 。此方法需要權限Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION 。
public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
CarUxRestrictionsConfiguration config);
保留新的 UX 限製配置
傳入新配置時,UX Restrictions 服務會返回一個布爾值以指示新配置是否已成功保存。這種新配置僅在集成主機 (IHU) 重新啟動且汽車停放時使用。在內部,UX Restrictions 服務包含兩組配置:
- 生產。雖然是可選的,但此配置通常存在。 UX Restrictions 服務在啟動時會讀取此配置。
- 上演。同樣可選,此配置對 UX Restrictions 沒有影響,並在汽車服務啟動和汽車停放時提升為 Production。

圖 1.生產配置
解決故障
在從 CarPropertyManager 接收到駕駛狀態信息(例如,在啟動期間)之前,不會強制執行 UX 限制。系統將如同駕駛狀態為停車一樣執行。
如果讀取保存的配置失敗(例如 SettingNotFoundException 結果),UX Restrictions 服務將退回到硬編碼的完全受限模式:
// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
駕駛狀態和用戶限制
以下內容描述了以下設計圖中顯示的交互:

圖 2.駕駛狀態交互
用於導出駕駛狀態的屬性
使用以下三個VehiclePropertyIds導出駕駛狀態:
應用程序可用的 API
代碼位於以下位置:
要模擬駕駛狀態,請參閱測試。