通过此功能,合作伙伴可以选择如何同步时间:是从 Android Automotive 操作系统 (AAOS) 还是车载系统同步到 Android。为了确保实现质量,您可以将 AAOS 配置为使用下文所述的两个新 VHAL 属性之一,以便有效地传播值。使用:
ANDROID_EPOCH_TIME
(如果将 Android 作为时间的可信来源)。VHAL 支持这个只写属性,该属性会将 Android 的时间变化传达给其他车载系统,如电子控制单元 (ECU) 和车身控制模块 (BCM)。EXTERNAL_CAR_TIME
(如果不将 Android 作为时间的可信来源)。在这种情况下,VHAL 支持只读属性EXTERNAL_CAR_TIME
,该属性会将其他车载系统(例如 ECU 和 BCM)的时间变化传达给 Android。
AAOS 还提供可配置的 TimeDetectorStrategy
,以帮助您确定 Android 中不同时间源的优先级。
Android 是时间的可信来源
当 Android 用作时间源时,OEM 可以将其他车载系统(包括 ECU 和 BCM)与 Android 时间同步。
为此,VHAL 实现必须支持只写属性 ANDROID_EPOCH_TIME
。无论是在启动时,还是在 Android 中的时间源发生更改时,Android 都会通过读取系统时间来发布对该属性的更新。
Android 不是时间的可信来源
当 Android 未用作时间源时,您可以将 Android 时间同步为时间的可信来源(例如,与 ECU 或 BCM 同步)。在这种情况下,VHAL 实现必须支持只读属性 EXTERNAL_CAR_TIME
,并且只要时间源发生变化或重新校准时钟,就会发布对该属性的更新。
此外,OEM 还必须确保:
config_autoTimeSourcesPriority
值包含在core/res/res/values/config.xml
中。- CarServices 叠加层配置
packages/services/Car/service/res/values/config.xml
中的config_enableExternalCarTimeToExternalTimeSuggestion
属性设置为true
。 - external 时间在
TimeDetectorStrategy
配置中具有适当的优先级。如需了解详情,请参阅 GNSS 时间检测。 例如:<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list take precedence over lower ones. See com.android.server.timedetector.TimeDetectorStrategy for available sources. --> <string-array name="config_autoTimeSourcesPriority"> <item>external</item> <item>gnss</item> <item>network</item> <item>telephony</item> </string-array>
Android 内部实现详情
当 ANDROID_EPOCH_TIME
VHAL 属性受支持时,会发生以下流程:
TimeHalService
(在 CarServices 中)从 Android 系统收到Intent.ACTION_TIME_CHANGED
的广播。TimeHalService
发布对 VHAL 属性ANDROID_EPOCH_TIME
的更新。- VHAL 可将收到的时间值传播到各种 ECU 和/或 BCM 单元。
当 EXTERNAL_CAR_TIME
VHAL 属性受支持时,会发生以下流程:
- VHAL 更新
EXTERNAL_CAR_TIME
属性。 TimeHalService
(在 CarServices 中)通过订阅读取该属性。TimeHalService
创建ExternalTimeSuggestion
并将其发送到TimeManager
。TimeManager
将建议转发给TimeDetectorService
。TimeDetectorService
使用TimeDetectorStrategy
选择新的系统时间。