Phát hiện thời gian tự động nhận đề xuất về thời gian từ nhiều nguồn, sau đó chọn tốt nhất rồi đặt đồng hồ hệ thống trong Android sao cho khớp. Các bản phát hành Android trước đây được 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, và đặt bằng một trong các cách sau:
telephony
sử dụng tín hiệu điện thoại về Danh tính mạng và Múi giờ (NITZ).network
sử dụng máy chủ thời gian Giao thức thời gian mạng (NTP).
Mỗi lựa chọn đều yêu cầu kết nối với mạng bên ngoài, một mạng không phải lúc nào cũng hoạt động trên Android Ô tô. Ví dụ: ở một số quốc gia, một số ô tô có thể không có điện thoại tích hợp sẵn. Do đó, Thời gian Hệ thống điều hướng vệ tinh toàn cầu (GNSS) được cung cấp làm nguồn 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 này cung cấp thêm hai tuỳ chọn để tự động phát hiện và đặt thời gian:
gnss
sử dụng vệ tinh chung Hệ thống điều hướng (GNSS).external
lần sử dụng thuộc tính VHAL hoặc System API.
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 & Thời gian > Ngày tự động và Thời gian:
Hình 1. Chọn Ngày tự động và Thời gian
Định cấu hình nguồn thời gian
Để chỉ định nguồn thời gian để đưa vào tính năng tự động phát hiện thời gian và mức độ ưu tiên
trong khoảng thời gian cần xem xét các nguồn thời gian này, bạn phải sửa đổi tài nguyên của thiết bị
tệp cấu hình, 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
phát hiện thời gian tự động và telephony
đề xuất thời gian được ưu tiên
trước network
đề xuất thời gian.
Nói chung, đề 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 nếu đề xuất 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 theo đồ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), nên thời gian sẽ không thay đổi.
Giới hạn thời gian dưới
Android 12 đưa ra giới hạn thời gian thấp hơn mới để sử dụng khi đề xuất thời gian xác thực. Trước tính năng này, phát hiện thời gian tự động sẽ không xác thực thời gian UTC đề xuất. Với tính năng này, thời gian trôi qua trước giới hạn dưới là đã loại bỏ.
Giá trị giới hạn dưới được xác định từ một ngày thu được từ dấu thời gian của bản dựng. Tính năng này hoạt động trên nguyên tắc cho biết 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 thì không thực thi giới hạn trên.
Đề xuất về thời gian GNSS
Nguồn thời gian gnss
mới có trên Android 12 và được cung cấp bởi tín hiệu GPS. Đây là
một nguồn đáng tin cậy khi không có telephony
và network
.
Lựa chọn này được thêm vào GnssTimeUpdateService
mới trong
SystemServer theo dõi thông tin cập nhật vị trí một cách thụ động. Khi nhận được vị trí hợp lệ,
GnssTimeUpdateService
đưa ra một đề xuất cho TimeDetectorService
và điều này
sau đó xác định xem có nên 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 và do đó,
phải được bật bởi đối tác:
<!-- 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>
Để bật tính năng này:
- Cập nhật
config_enableGnssTimeUpdateService
. Giá trị cho Phải đặtconfig_enableGnssTimeUpdateService
thànhtrue
. - Cập nhật
config_autoTimeSourcesPriority
. Bạn phải thêmgnss
vào danh sách mặt hàng choconfig_autoTimeSourcesPriority
. Vị trí củagnss
trong danh sách ưu tiên sẽ xác định mức độ ưu tiên cho các đề xuất GNSS đối với các giá trị từ các nguồn khác.
Tác động đến nguồn điện
GnssTimeUpdateService
lắng nghe thông tin cập nhật vị trí một cách thụ động, điều này có nghĩa là
tuyệt đối không bật GPS để tiêu thụ thêm pin. Kết quả là, năng lượng tiêu thụ khi
nguồn GNSS được bật 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 thông tin cập nhật về vị trí, GnssTimeUpdateService
sẽ không nhận được thông tin vị trí
cập nhật và đề xuất thời gian GNSS.
Thử nghiệm
Bộ kiểm tra tính tương thích (CTS)
Bạn tiến hành kiểm tra CTS để 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ị
Hãy xem các bài 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
Để thử nghiệm tính năng này, chúng tôi đã thêm các lệnh mới vào
LocationShellCommand.java
. Dùng các lệnh sau để thêm chương trình kiểm thử
những nhà cung cấp dịch vụ mà bạn có thể chỉ định một vị trí và thời gian GNSS được liên kết.
GnssTimeUpdateService
theo dõi các thông tin cập nhật vị trí này và định kỳ
đưa ra đề xuất.
Lưu ý: Giao diện cho 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 về thời gian bên ngoài
Nội dung đề xuất về thời gian bên ngoài là một cách khác để cung cấp nội dung đề xuất tự động về thời gian cho Android. Lựa chọn mới này cho phép bạn cung cấp các đề xuất về thời gian tuỳ chỉnh hoàn toàn cho Android, có thể bắt nguồn từ nhiều ECU có thể sử dụng kết hợp một đồng hồ thời gian thực, GNSS, NITZ hoặc bất kỳ nguồn thời gian nào khác.
Các đề xuất sau đây đã có trên Android 12 để bạn có thể xem xét là external
gợi ý thời gian:
- Thuộc tính VHAL. Một mô hình
Thuộc tính VHAL
có tên là
EPOCH_TIME
sẽ đượ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/1/1970 theo giờ UTC. Giá trị của biến này có thể được chuyển đến AndroidTimeManager
để đề xuất thời gian hệ thống mới. VHAL mẫu để cập nhật thuộc tính này được cung cấp trong cách triển khai tệp đối chiếu bên dưới. - API hệ thống. Một phương thức mới có tên là
suggestExternalTime()
có sẵn trong TimeManager để cung cấp cho hệ thống đề 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 theo thời gian bên ngoài (sử dụngconfig_autoTimeSourcesPriority
trong tệp cấu hình), dấu thời gian được truyền vào phương thức này dùng để đặt thời gian hệ thống, nếu không có thời gian nào cao hơn đề xuất thời gian ưu tiê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>
Thao tác này sẽ hướng dẫn Android đưa ra mức độ ưu tiên cao nhất cho việc đề xuất theo thời gian bên ngoài đồng hồ hệ thống. Phần cứng trên xe sẽ ghi nội dung đề xuất về dấu thời gian cho
EPOCH_TIME
Thuộc tính VHAL. - Ứng dụng do nhà cung cấp cung cấp đọ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.