Tính năng Tự động phát hiện thời gian nhận các đề xuất về thời gian từ nhiều nguồn, chọn tuỳ chọn tốt nhất, sau đó đặt đồng hồ hệ thống trong Android cho phù hợp. Các bản phát hành Android trước đây cung cấp hai cách để đặt ngày và giờ, đặt theo cách thủ công cho mỗi người dùng hoặc bằng tính năng phát hiện thời gian tự động, đồng thời đặt bằng một trong các tuỳ chọn sau:
telephony
sử dụng tín hiệu điện thoại của Mạng nhận dạng và múi giờ (NITZ).network
sử dụng máy chủ thời gian theo Giao thức thời gian mạng (NTP).
Mỗi tuỳ chọn đều yêu cầu kết nối với các mạng bên ngoài, nhưng không phải lúc nào cũng có trong Android Automotive. Ví dụ: ở một số quốc gia, một số xe có thể không tích hợp điện thoại. Do đó, thời gian của Hệ thống định vị vệ tinh toàn cầu (GNSS) được cung cấp dưới dạng nguồn thời gian hệ thống để bạn sử dụng khi không có kết nối mạng.
Bản phát hành Android sắp tới sẽ cung cấp thêm hai tuỳ chọn để tự động phát hiện và đặt giờ:
Bật tính năng tự động phát hiện thời gian
Để bật tính năng tự động phát hiện thời gian, hãy nhớ chọn Cài đặt > Ngày và giờ > Ngày và giờ tự động:
Hình 1. Chọn Ngày và giờ tự động
Định cấu hình nguồn thời gian
Để chỉ định nguồn thời gian nào sẽ được đưa vào tính năng tự động phát hiện thời gian và mức độ ưu tiên cần xem xét các nguồn thời gian này, bạn phải sửa đổi tệp cấu hình tài nguyên của thiết bị, core/res/res/values/config.xml
:
<!-- 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>telephony</item> <item>network</item> </string-array>
Trong ví dụ này, telephony
và network
được xem xét trong tính năng phát hiện thời gian tự động và đề xuất thời gian telephony
được ưu tiên hơn đề xuất thời gian network
.
Nhìn chung, các đề xuất từ nguồn có mức độ ưu tiên cao hơn sẽ bị bỏ qua nếu đề xuất không hợp lệ hoặc quá cũ. Ngoài ra, nếu đề xuất hợp lệ có mức độ ưu tiên cao nhất khớp với thời gian đồng hồ hệ thống hiện tại của thiết bị trong vòng vài giây (giá trị mặc định là hai (2) giây), thì thời gian sẽ không thay đổi.
Giới hạn thời gian thấp hơn
Android 12 cung cấp một giới hạn thời gian thấp hơn mới để sử dụng khi xác thực các đề xuất về thời gian. Trước khi có tính năng này, tính năng phát hiện thời gian tự động sẽ không xác thực thời gian UTC sắp tới được đề xuất. Với tính năng này, thời gian trôi qua trước giới hạn dưới sẽ bị loại bỏ.
Giá trị giới hạn dưới được xác định từ một ngày bắt nguồn từ dấu thời gian bản dựng. Phương thức này hoạt động dựa trên nguyên tắc là thời gian hợp lệ không thể xảy ra trước khi hình ảnh hệ thống được tạo. Android không thực thi giới hạn trên.
Đề xuất thời gian GNSS
Nguồn thời gian gnss
là nguồn mới trong Android 12 và do tín hiệu GPS cung cấp. Đây là nguồn đáng tin cậy cho thời gian khi telephony
và network
không có sẵn.
Tuỳ chọn này được thêm vào GnssTimeUpdateService
mới trong SystemServer để chủ động theo dõi thông tin cập nhật về vị trí. Khi nhận được thông tin vị trí hợp lệ, GnssTimeUpdateService
sẽ đưa ra đề xuất cho TimeDetectorService
. Sau đó, TimeDetectorService
sẽ xác định xem có cập nhật đồng hồ hệ thống hay không.
Theo mặc định, nguồn thời gian gnss
không được bật trong AOSP, do đó, đối tác phải bật nguồn thời gian này:
<!-- 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>telephony</item> <item>network</item> <item>gnss</item> </string-array> <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. --> <bool name="config_enableGnssTimeUpdateService">true</bool>
Cách bật tính năng này:
- Cập nhật
config_enableGnssTimeUpdateService
. Bạn phải đặt giá trị choconfig_enableGnssTimeUpdateService
thànhtrue
. - Cập nhật
config_autoTimeSourcesPriority
. Bạn phải thêmgnss
vào danh sách mục choconfig_autoTimeSourcesPriority
. Vị trí củagnss
trong danh sách mức độ ưu tiên xác định mức độ ưu tiên được áp dụng cho các đề xuất GNSS, liên quan đến các giá trị từ các nguồn khác.
Tác động đến nguồn điện
GnssTimeUpdateService
nghe thụ động các bản cập nhật vị trí, nghĩa là GnssTimeUpdateService
không bao giờ chủ động bật GPS để tiêu thụ thêm điện năng. Do đó, mức năng lượng tiêu thụ khi bật nguồn GNSS là không đáng kể. Điều này cũng có nghĩa là trừ phi một ứng dụng hoặc dịch vụ khác trong hệ thống chủ động yêu cầu cập nhật vị trí, GnssTimeUpdateService
sẽ không nhận được thông tin cập nhật vị trí và đề xuất thời gian GNSS.
Thử nghiệm
Bộ kiểm thử tính tương thích (CTS)
Một bài kiểm thử CTS được cung cấp để xác minh rằng có thời gian do GNSS cung cấp. Để biết thông tin chi tiết, hãy xem LocationShellCommand.java
.
Kiểm thử đơn vị
Xem các kiểm thử đơn vị cơ bản trong tệp sau:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Bài kiểm tra thủ công
Để kiểm thử tính năng này, các lệnh mới đã được thêm vào LocationShellCommand.java
. Sử dụng các lệnh này để thêm nhà cung cấp thử nghiệm mà bạn có thể chỉ định vị trí và thời gian GNSS liên quan.
GnssTimeUpdateService
theo dõi các bản cập nhật vị trí này và định kỳ đưa ra đề xuất.
Lưu ý: Giao diện của các lệnh này có thể thay đổi giữa các bản phát hành.
# Enable Master Location Switch in the foreground user (usually user 10 on automotive). # If you just flashed, this can be done through Setup Wizard. adb shell cmd location set-location-enabled true --user 10 # Add GPS test provider (this usually fails the first time and will throw a SecurityException # with "android from <some-uid> not allowed to perform MOCK_LOCATION".) adb shell cmd location providers add-test-provider gps # Enable mock location permissions for previous UID adb shell appops set <uid printed in previous error> android:mock_location allow # Add GPS test provider (Should work with no errors.) adb shell cmd location providers add-test-provider gps # Enable GPS test provider adb shell cmd location providers set-test-provider-enabled gps true # Set location with time (time can't be earlier than the limit set by the lower bound.) adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>
Đề xuất thời gian bên ngoài
Đề xuất thời gian bên ngoài là một cách khác để cung cấp đề xuất thời gian tự động cho Android. Tuỳ chọn mới này cho phép bạn cung cấp các đề xuất thời gian hoàn toàn tuỳ chỉnh cho Android. Các đề xuất này có thể bắt nguồn từ nhiều ECU, từ đó có thể sử dụng kết hợp đồng hồ theo thời gian thực, GNSS, NITZ hoặc bất kỳ nguồn thời gian nào khác.
Bạn có thể cân nhắc các đề xuất sau đây trong Android 12 dưới dạng đề xuất thời gian external
:
- Thuộc tính VHAL. Một thuộc tính VHAL mới có tên
EPOCH_TIME
được cung cấp. Thuộc tính này biểu thị số mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 (theo giờ UTC). Giá trị của nó có thể được truyền đếnTimeManager
của Android để đề xuất thời gian hệ thống mới. Một ví dụ về cách triển khai VHAL cập nhật thuộc tính này được cung cấp trong phần triển khai tham chiếu bên dưới. - API hệ thống. Một phương thức mới có tên là
suggestExternalTime()
có trong TimeManager để cung cấp cho hệ thống một đề xuất thời gian bên ngoài. Nếu hệ thống được định cấu hình để tính đến các đề xuất thời gian bên ngoài (sử dụngconfig_autoTimeSourcesPriority
trong tệp cấu hình), thì dấu thời gian được truyền đến phương thức này sẽ được dùng để đặt thời gian hệ thống, nếu không có đề xuất thời gian có mức độ ưu tiên cao hơn.
Bạn có thể triển khai giải pháp thời gian bên ngoài như mô tả dưới đây:
- Cập nhật tệp cấu hình tài nguyên (
core/res/res/values/config.xml
) rồi thêm giá trịexternal
vàoconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Việc này sẽ hướng dẫn Android đưa ra đề xuất thời gian bên ngoài với mức độ ưu tiên cao nhất khi đặt đồng hồ hệ thống. Phần cứng trên xe sẽ ghi đề xuất dấu thời gian vào thuộc tính VHAL mới của
EPOCH_TIME
. - Ứng dụng do nhà cung cấp cung cấp sẽ đọc thuộc tính này và gọi
TimeManager.suggestExternal()
. Sau đó, Android có thể sử dụng dấu thời gian được cung cấp làm giá trị đồng hồ hệ thống mới.