请在阅读本文之前阅读驾车时防分心指南。
本页面介绍了汽车用户体验 (UX) 限制规则,您可以根据这些规则创建多个用户体验限制规则配置(例如适用于欧盟和适用于日本的规则),然后确定在运行时应用哪些规则。如需了解详情,请参阅 CarUxRestrictions。
借助汽车用户体验限制服务,开发者可以定义新的汽车用户体验限制配置。如果开发者想要修改限制规则(例如,为了符合当地安全标准),可以使用 API 定义新配置。
用于设置配置的 API 仅保留在新配置中。也就是说,配置不会立即生效,而是在用户体验限制服务重启时和停车后加载。汽车服务在重新加载新配置之前会确保处于停车状态。
除了新的用户体验限制服务方法之外,我们还提供了用于构建配置的 API。挡位选择和汽车速度的状态会转换为以下三种驾车状态之一:
- 停车后。挡位处于“停车”状态。
- 怠速。挡位未处于“停车”状态,且速度为零。
- 行驶中。挡位未处于“停车”状态,且速度不为零。
如需了解应用如何使用驾驶状态及相应的用户体验限制,请参阅使用驾驶状态和用户体验限制。
基于驾驶状态的限制配置
为了防止驾驶员分心,Android 会将驾驶状态映射到一组用户体验限制 /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 会将规则保存到内存中。然后,该服务会将当前驾车状态映射到用户体验限制,并将当前限制广播到整个系统。
<!-- 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>setRestrictionMode(@NonNull String mode) 方法(以前您会使用 CarUxRestrictionsManager 中的 setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) 方法)。
CarUxRestrictionsConfiguration API
CarUxRestrictionsConfiguration 的限制
新类 CarUxRestrictionsConfiguration 与当前 XML 配置架构一一映射。CarUxRestrictionsConfiguration 可通过 CarUxRestrictions. 进行构建,后者可在执行 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);保留新的用户体验限制配置
传入新配置后,用户体验限制服务会返回一个布尔值,指示是否已成功保存新配置。仅在集成车机 (IHU) 重启时以及停车后使用新配置。在内部,用户体验限制服务包含以下两组配置:
- 量产阶段。尽管该配置是可选配置,但通常都会显示。用户体验限制服务会在启动时读取该配置。
- 预演版。该配置也是可选配置,不会对用户体验限制产生任何影响,且可在汽车服务启动时以及停车后升级到正式版。

图 1. 正式版配置
解决失败问题
在从 CarPropertyManager 收到驾驶状态信息(例如,在启动中)之前,系统不会强制实施用户体验限制。系统会像处于“停车”驾驶状态时一样运行。
如果读取保存的配置失败(例如,返回 SettingNotFoundException 结果),则用户体验限制服务会回退到经过硬编码的完全受限模式:
// Idling/moving state is fully restricted. private static CarUxRestrictionsConfiguration generateDefaultConfig() {}
驾驶状态和用户限制
以下内容介绍了以下设计图中显示的交互:

图 2. 驾车状态交互
用于推导驾驶状态的属性
使用以下三个 VehiclePropertyIds 推导驾车状态:
适用于应用的 API
代码位于以下位置:
如需模拟驾驶状态,请参阅测试。