Tổng quan về thời gian

Trang này mô tả cách hoạt động của tính năng phát hiện giờ và múi giờ trên Android. Trong đó bao gồm cách Android tự động phát hiện giờ và múi giờ, các lựa chọn về cấu hình cho nhà sản xuất thiết bị và thông tin kiểm thử.

Tổng quan về giờ và múi giờ

Để xác định giờ địa phương của người dùng hiển thị ở các vị trí, chẳng hạn như thanh trạng thái, Android theo dõi 2 trạng thái liên quan nhưng độc lập:

  • Thời gian bắt đầu của hệ thống Unix hiện tại
  • Múi giờ hiện tại

Thời gian bắt đầu của hệ thống Unix hiện tại và múi giờ hiện tại là các trạng thái trên toàn thiết bị, có nghĩa là tất cả người dùng thiết bị đều dùng chung các trạng thái này.

Thời gian bắt đầu của hệ thống Unix hiện tại không phải là giá trị cố định. Nó tự động cập nhật để phản ánh khoảng thời gian đã qua. Ngoài khoảng thời gian thông thường, thời gian bắt đầu của hệ thống Unix hiện tại của thiết bị sẽ được điều chỉnh nếu hệ thống phát hiện thiết bị không chính xác, ví dụ: sau khi thiết bị mất nguồn.

Múi giờ hiện tại xác định việc điều chỉnh cần thực hiện để chuyển đổi thời gian bắt đầu của hệ thống Unix hiện tại sang giờ địa phương. Ví dụ: vào mùa hè ở Los Angeles, thiết bị sẽ trừ 7 giờ khỏi thời gian bắt đầu của hệ thống Unix hiện tại, và vào mùa đông, số giờ này sẽ trừ đi 8 giờ.

Để hỗ trợ những phép tính giờ địa phương này, tất cả thiết bị Android đều có một cơ sở dữ liệu gồm tất cả các quy tắc về múi giờ trên toàn cầu. Để biết thêm thông tin về quy tắc múi giờ, hãy xem phần Quy tắc múi giờ.

Khi người dùng di chuyển đến một vị trí mới sử dụng múi giờ khác, thì bạn không cần điều chỉnh thời gian bắt đầu của hệ thống Unix hiện tại, nhưng thường thì người dùng sẽ muốn xem giờ địa phương thay vì thời gian ở vị trí trước đó. Việc thay đổi múi giờ hiện tại đảm bảo rằng độ lệch chính xác sẽ được áp dụng cho thời gian bắt đầu của hệ thống Unix hiện tại để hiển thị giờ địa phương chính xác cho vị trí mới.

AOSP cho phép người dùng kiểm soát độc lập xem giờ và múi giờ có được tự động đặt cho họ hay không thông qua các cơ chế sau.

  • Phát hiện thời gian tự động: Đảm bảo thiết bị có thời gian bắt đầu của hệ thống Unix hiện tại.
  • Tự động phát hiện múi giờ: Đảm bảo thiết bị có đúng múi giờ hiện tại.

Phát hiện thời gian tự động

Phần này cung cấp thông tin tổng quan về dịch vụ time_detector quản lý tính năng tự động phát hiện thời gian, chế độ kiểm soát của người dùng, các tuỳ chọn cấu hình và thông tin kiểm thử chi tiết.

Dịch vụ time_detector

Dịch vụ time_detector (có trên các thiết bị chạy Android 10 trở lên) quản lý tính năng tự động phát hiện thời gian. Chế độ này điều chỉnh thời gian bắt đầu của hệ thống Unix hiện tại của thiết bị nếu cần khi tính năng phát hiện thời gian tự động được bật.

Dịch vụ time_detector luôn ở một trong 2 trạng thái: không chắc chắn hoặc nhất định. Trạng thái nhất định hoặc không chắc chắn của dịch vụ được xác định bằng các đề xuất về thời gian mà dịch vụ đó nhận được từ nhiều nguồn.

Khi dịch vụ time_detector chắc chắn, tức là đã nhận được đề xuất có thông tin về thời gian bắt đầu của hệ thống Unix, dịch vụ đó sẽ ghi đè thời gian bắt đầu của hệ thống Unix hiện tại nếu đề xuất thời gian khác với thời gian bắt đầu của hệ thống Unix hiện tại.

Khi không chắc chắn, time_detector sẽ không ghi đè thời gian hiện tại. Trạng thái không chắc chắn thường có nghĩa là dịch vụ time_detector chưa nhận được đề xuất về thời gian. Dịch vụ time_detector cũng không chắc chắn liệu các đề xuất đã nhận được có bị coi là quá cũ nên không dùng được hay không. Thời hạn của đề xuất được cân nhắc vì việc điều chỉnh sử dụng đề xuất về thời gian bắt đầu của hệ thống Unix cũ sẽ dựa vào đồng hồ thời gian thực đã trôi qua trên thiết bị. Đồng hồ này được coi là không chính xác trong khoảng thời gian dài.

Để tự động thiết lập thời gian bắt đầu của hệ thống Unix hiện tại, một thiết bị có thể sử dụng nhiều nguồn. Những nguồn này được gọi là nguồn gốc trong tài liệu này. Dịch vụ time_detector coi các trình tự đề xuất là riêng biệt dựa trên nguồn gốc của các đề xuất đó.

Dịch vụ time_detector có trạng thái, nghĩa là dịch vụ này lưu giữ bản ghi về các đề xuất gần đây nhất của mỗi nguồn gốc. Các đề xuất mới được đưa ra cho time_detector nếu một nguồn gốc có thông tin mới hơn về thời gian bắt đầu của hệ thống Unix. Dịch vụ time_detector sẽ đánh giá lại các đề xuất mới và hiện có, đồng thời cập nhật trạng thái thiết bị khi nhận được đề xuất.

Mặc dù thời gian UTC được thống nhất trên toàn thế giới, nhưng có nhiều lý do khiến việc thiết lập thời gian bắt đầu của hệ thống Unix hiện tại không phải lúc nào cũng đơn giản đối với thiết bị Android:

  • Thời gian bắt đầu của hệ thống Unix là một hệ thống tính giờ khác biệt nhỏ so với thời gian theo giờ UTC. Việc chuyển đổi giữa hai chế độ này yêu cầu bạn phải biết thời điểm xảy ra giây nhuận và cách các nguồn gốc xử lý chúng.
  • Nguồn gốc có thể chỉ có sẵn vào một số thời điểm hoặc trong một số trường hợp nhất định. Ví dụ: nếu nguồn gốc yêu cầu kết nối mạng, thì nguồn gốc đó có thể chỉ dùng được khi thiết bị kết nối với Internet.
  • Các nguồn gốc này có thể không chính xác, không chính xác hoặc có lỗi. Ví dụ: nếu một trạm phát sóng điện thoại không theo dõi chính xác "thời gian toàn cầu", thì nguồn gốc điện thoại có thể đưa ra các đề xuất về thời gian không chính xác.
  • Có thể có lỗi không chính xác khi lấy thông tin về thời gian bắt đầu của hệ thống Unix. Ví dụ: độ trễ mạng, việc lưu vào bộ đệm hoặc lên lịch tiến trình có thể khiến thời gian bắt đầu của hệ thống Unix không chính xác.
  • Đồng hồ tham chiếu dùng để điều chỉnh đề xuất cho thời gian đã trôi qua vì đề xuất đã được nhận có thể không chính xác.

Có 2 nguồn gốc phát hiện thời gian chính được định cấu hình để sử dụng theo mặc định trong AOSP:

  • Mạng: Sử dụng máy chủ thời gian Giao thức thời gian mạng (NTP).
  • Điện thoại: Sử dụng tín hiệu điện thoại nhận dạng mạng và Múi giờ (NITZ).

Cả nguồn gốc điện thoại và mạng đều yêu cầu kết nối với mạng bên ngoài, và không phải lúc nào cũng dùng được.

Kể từ Android 12, Android cũng hỗ trợ các nguồn sau (không được định cấu hình để sử dụng theo mặc định):

  • GNSS: Sử dụng trình cung cấp vị trí GPS để lấy thời gian từ nguồn GNSS.
  • Bên ngoài: Nguồn gốc chung cho phép nhà sản xuất thiết bị tích hợp nguồn thời gian bắt đầu của hệ thống Unix của riêng họ.

Cài đặt thời gian

Người dùng có thể bật tính năng tự động phát hiện thời gian trong System > Date and Time (Hệ thống > Ngày và giờ) trong ứng dụng Cài đặt AOSP (Dự án nguồn mở Android).

Tính năng tự động phát hiện thời gian trong phần Cài đặt

Hình 1. Tính năng tự động phát hiện thời gian trong phần Cài đặt.

Bảng sau đây mô tả các quyền kiểm soát của người dùng đối với tính năng phát hiện thời gian trong ứng dụng Cài đặt AOSP (Dự án nguồn mở Android).

*Trên Android 11 trở xuống, chế độ cài đặt này được gắn nhãn là Sử dụng thời gian do mạng cung cấp

Vị trí Cài đặt AOSP (Dự án nguồn mở Android) Tên chế độ cài đặt AOSP (Dự án nguồn mở Android) Phạm vi Hành vi
Hệ thống > Ngày và giờ Tự động đặt giờ* Tất cả người dùng

Một nút bật/tắt.

Khi bật, thiết bị chịu trách nhiệm phát hiện thời gian bắt đầu của hệ thống Unix hiện tại. Khi bạn tắt, người dùng sẽ được cung cấp các chế độ kiểm soát để đặt thời gian của thiết bị theo cách thủ công.

Khi người dùng nhập thời gian theo cách thủ công, họ sẽ nhập giờ địa phương, chứ không phải thời gian bắt đầu của hệ thống Unix. Thời gian bắt đầu của hệ thống Unix hiện tại được tính bằng cách sử dụng múi giờ hiện tại để lấy thời gian bắt đầu của hệ thống Unix.

Cấu hình

Các nhà sản xuất thiết bị có thể định cấu hình dịch vụ time_detector theo nhiều cách, chẳng hạn như nguồn gốc cần sử dụng và cách ưu tiên các tín hiệu từ những nguồn đó.

Mức độ ưu tiên của máy chủ gốc

Từ Android 12, nhà sản xuất thiết bị có thể thay đổi tệp cấu hình core/res/res/values/config.xml để chỉ định nguồn gốc của thời gian sẽ được đưa vào tính năng tự động phát hiện thời gian và mức độ ưu tiên mà time_detector xem xét những nguồn gốc này.

Đối với các thiết bị chạy Android 11 trở xuống, mức độ ưu tiên của nguồn gốc được mã hoá cứng thành ["telephony", "network"], nghĩa là các đề xuất về điện thoại được ưu tiên phía trên các đề xuất về mạng.

Sau đây là cấu hình AOSP mặc định:

<!-- 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>network</item>
    <item>telephony</item>
</string-array>

Trong Android 12, các đề xuất về mạng và điện thoại được định cấu hình làm nguồn gốc để sử dụng theo mặc định. Đề xuất về thời gian mạng được ưu tiên hơn đề xuất về thời gian của điện thoại. Nhà sản xuất thiết bị có thể thay đổi thứ tự nguồn gốc để quay về hành vi trong Android 11 trở xuống, trong đó điện thoại được ưu tiên hơn.

Theo mặc định, 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, thì thời gian trên thiết bị sẽ không thay đổi. Điều này nhằm tránh tạo công việc cho các ứng dụng đã cài đặt nghe ý định ACTION_TIME_CHANGED.

Sau đây là các giá trị nguồn gốc được phép:

Giới hạn thời gian cho phép

Android 14 đưa ra giới hạn thời gian trên cho các đề xuất về thời gian mà dịch vụ time_detector nhận được. Nếu thiết bị hỗ trợ các quy trình 32 bit, khung sẽ đặt giới hạn thời gian trên để ngăn thiết bị sử dụng đề xuất về thời gian có thể kích hoạt vấn đề Y2038.

Android 12 ra mắt giới hạn thời gian thấp hơn, dùng để xác thực các đề xuất về thời gian mà dịch vụ time_detector nhận được. Giá trị giới hạn thời gian dưới dùng cho các đề xuất tự động được đặt từ dấu thời gian của bản dựng. Tính năng này hoạt động theo nguyên tắc không được có thời gian hợp lệ trước khi ảnh hệ thống của thiết bị được tạo. Nếu đề xuất về thời gian trước giới hạn thời gian dưới, thì dịch vụ time_detector sẽ loại bỏ đề xuất đó vì đề xuất đó không thể hợp lệ nếu dấu thời gian của bản dựng là chính xác.

Đối với các thiết bị chạy Android 11 trở xuống, dịch vụ time_detector sẽ không xác thực các đề xuất về thời gian bắt đầu của hệ thống Unix sắp tới.

Thời gian gỡ lỗi và kiểm thử

Phần này cung cấp thông tin về cách gỡ lỗi và kiểm thử hành vi của dịch vụ time_detector cũng như các thành phần khác mà mọi nguồn gốc dùng chung.

Tương tác với dịch vụ time_detector

Để xem cấu hình và trạng thái của dịch vụ time_detector, dịch vụ time_detector, hãy sử dụng:

adb shell cmd time_detector dump

Để xem các lệnh khác dùng để gỡ lỗi và kiểm thử tính năng phát hiện múi giờ, hãy sử dụng:

adb shell cmd time_detector help

Kết quả trợ giúp cũng mô tả các thuộc tính dịch vụ device_config có thể được dùng để tác động đến hành vi của time_detector cho mục đích kiểm thử hoặc trong phiên bản chính thức. Để biết thông tin chi tiết, hãy xem phần Định cấu hình thiết bị bằng dịch vụ device_config.

Để xác thực tính năng phát hiện thời gian tự động, người kiểm thử phải biết được dịch vụ time_detector đang sử dụng những nguồn gốc nào. Sau đây là ví dụ về kết quả của lệnh adb shell cmd time_detector dump, trong đó thông tin về nguồn gốc và trạng thái dịch vụ hiện tại được in đậm:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

Thông tin này có thể được diễn giải như sau:

Khóa Giá trị
mEnvironment.isAutoTimeDetectionEnabled() Liệu tính năng tự động phát hiện thời gian có được bật hay không.
mEnvironment.autoTimeLowerBound() Giới hạn dưới hiện tại được dùng để xác thực đề xuất về thời gian.
mEnvironment.autoOriginPriorities() Nguồn gốc đang sử dụng và thứ tự ưu tiên.

Nhật ký thay đổi thời gian cho biết những trường hợp khi dịch vụ time_detector thay đổi thời gian bắt đầu của hệ thống Unix hiện tại của thiết bị.

Thông tin về nhật ký đề xuất cho biết những đề xuất do từng nguồn gốc đưa ra.

Tự động phát hiện múi giờ

Phần này cung cấp thông tin tổng quan về dịch vụ time_zone_detector giúp quản lý tính năng tự động phát hiện múi giờ, quyền kiểm soát của người dùng trong chế độ cài đặt, phát hiện múi giờ điện thoại và vị trí, cũng như chi tiết kiểm thử.

Dịch vụ time_zone_detector

Dịch vụ time_zone_detector (có trên các thiết bị chạy Android 11 trở lên) quản lý tính năng tự động phát hiện múi giờ. Chế độ này điều chỉnh múi giờ hiện tại của thiết bị nếu cần khi tính năng tự động phát hiện múi giờ đang bật.

Khi bạn bật tính năng tự động phát hiện múi giờ, time_zone_detector có thể ở một trong hai trạng thái: không chắc chắnnhất định.

Khi dịch vụ time_zone_detector ở trạng thái nhất định, điều này có nghĩa là dịch vụ time_zone_detector đã nhận được thông tin rõ ràng về múi giờ. Việc này có thể khiến dịch vụ đó ghi đè múi giờ hiện tại. Khi không chắc chắn, điều này có nghĩa là thiết bị không nhận được thông tin nào hoặc chỉ nhận được thông tin có độ tin cậy thấp. Điều này có nghĩa là công cụ sẽ không ghi đè múi giờ hiện tại.

Một số trạng thái của dịch vụ time_zone_detector có thể bao gồm những trạng thái khi time_zone_detector không có thông tin múi giờ để sử dụng hoặc dịch vụ có nhiều múi giờ để lựa chọn. Các trạng thái này như sau:

  • Trạng thái nhất định không có múi giờ được nhập khi thiết bị ở một nơi nào đó không có múi giờ, chẳng hạn như ở vùng biển quốc tế hoặc trong một khu vực đang tranh chấp. Trạng thái này tương tự như trạng thái không chắc chắn, nhưng cho biết rằng time_zone_detector không cần thực hiện thêm hành động để cố gắng xác định múi giờ.
  • Bạn nhập một trạng thái nhất định có nhiều múi giờ khi có điều kiện về ranh giới hoặc không rõ ràng. Ở trạng thái này, nếu múi giờ hiện tại là một trong các múi giờ time_zone_detector chắc chắn, thì múi giờ hiện tại sẽ được giữ nguyên. Nếu không, một trong các múi giờ có sẵn sẽ được sử dụng. Điều này mang lại cho time_zone_detector một phần tử ổn định nếu trước đó người dùng đã tự chọn múi giờ của họ hoặc khi thiết bị tiến gần đến một đường viền.

Trạng thái nhất định hoặc không chắc chắn của dịch vụ time_zone_detector được xác định theo các đề xuất về múi giờ do một thuật toán gửi.

Nhìn chung, các đề xuất có 2 loại gần khớp với các trạng thái có thể có của time_zone_detector: nhất địnhkhông chắc chắn. Sau đây là ví dụ về các loại đề xuất:

  • loại = uncertain, zoneIds = []

    • Thuật toán không biết múi giờ là gì.
  • loại = certain, zoneIds = ["Europe/London"]

    • Thuật toán chắc chắn rằng khu vực này là Châu Âu/London.
  • loại = certain, zoneIds = []`

    • Thuật toán này chắc chắn, nhưng không có mã vùng nào liên kết với vị trí hiện tại.
  • loại = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • Thuật toán chắc chắn rằng câu trả lời là một trong 2 vùng, nhưng không thể chọn giữa "America/Denver" và "America/Phoenix".

Dịch vụ time_zone_detector coi trình tự đề xuất là riêng biệt dựa trên thuật toán của chúng. Tuỳ thuộc vào thuật toán, các đề xuất cũng có thể chứa siêu dữ liệu cho biết độ nhất định của thuật toán.

Dịch vụ time_zone_detector có trạng thái, nghĩa là dịch vụ này lưu giữ bản ghi đề xuất gần đây nhất do mỗi thuật toán đưa ra. Các đề xuất mới sẽ được gửi đến dịch vụ time_zone_detector nếu đề xuất trước đó không còn chính xác; nghĩa là nếu thuật toán hiện có đề xuất khác hoặc thuật toán không phát hiện được múi giờ. Dịch vụ time_zone_detector sẽ đánh giá lại các đề xuất mới và hiện có, đồng thời cập nhật trạng thái thiết bị khi nhận được các đề xuất.

Android hỗ trợ 2 thuật toán để phát hiện múi giờ:

  • Điện thoại
  • Vị trí

Dịch vụ time_zone_detector thường sử dụng một thuật toán duy nhất để xác định múi giờ. Khi thuật toán vị trí được hỗ trợ trên một thiết bị, thuật toán mà thiết bị sử dụng sẽ được xác định dựa trên Chế độ cài đặt múi giờ do người dùng định cấu hình. Khi thuật toán đang sử dụng không chắc chắn về múi giờ, time_zone_detector thường không sử dụng đề xuất từ một thuật toán khác. Các đề xuất liên kết với thuật toán không được sử dụng có thể được time_zone_detector giữ lại trong bộ nhớ, nhưng sẽ không được sử dụng trừ phi thuật toán thay đổi. Khi người dùng thay đổi chế độ cài đặt cho tính năng tự động phát hiện múi giờ và thuật toán thay đổi, đề xuất gần đây nhất dành cho thuật toán mới sẽ được sử dụng.

Để biết thông tin chi tiết về trường hợp sử dụng nhiều thuật toán để xác định múi giờ, hãy xem bài viết Chế độ dự phòng cho điện thoại.

Chế độ điện thoại dự phòng

Trên các thiết bị chạy Android 13 trở lên, dịch vụ time_zone_detector hỗ trợ chế độ dự phòng điện thoại. Chế độ này cho phép Android tạm thời sử dụng các đề xuất phát hiện điện thoại trong các trường hợp tính năng phát hiện vị trí không thể phát hiện múi giờ hoặc khi tính năng phát hiện vị trí mất nhiều thời gian hơn để phát hiện múi giờ so với phát hiện điện thoại.

Chế độ dự phòng điện thoại áp dụng cho các thiết bị hỗ trợ cả tính năng phát hiện vị trí và điện thoại, cũng như khi người dùng bật tuỳ chọn Sử dụng vị trí để đặt múi giờ trong phần Cài đặt múi giờ. Chế độ này tự động bật khi thiết bị khởi động lại và tắt chế độ trên máy bay.

Trên Android 14 trở lên, tính năng dự phòng điện thoại có thể được kích hoạt thông qua API báo cáo trạng thái LTZP, nghĩa là nếu một LTZP báo cáo thì tính năng này không chắc chắn khả năng phát hiện vị trí hoặc múi giờ bị suy giảm theo môi trường, chế độ dự phòng cho điện thoại sẽ được kích hoạt.

Khi ở chế độ dự phòng của điện thoại, dịch vụ time_zone_detector sử dụng các đề xuất điện thoại như thể tính năng phát hiện vị trí bị tắt cho đến khi thuật toán vị trí đưa ra một đề xuất nhất định. Sau khi nhận được một đề xuất nhất định, chế độ dự phòng điện thoại sẽ tắt và đề xuất vị trí sẽ chỉ được dùng.

Để biết thông tin chi tiết về cấu hình cho chế độ dự phòng của điện thoại, vui lòng xem phần Cấu hình phát hiện múi giờ.

Cài đặt múi giờ

Người dùng có thể bật và định cấu hình các chế độ cài đặt cho tính năng tự động phát hiện múi giờ trong ứng dụng Cài đặt AOSP (Dự án nguồn mở Android).

Tự động phát hiện múi giờ trong phần Cài đặt

Hình 2. Tự động phát hiện múi giờ trong phần Cài đặt.

Bảng sau đây mô tả các chế độ kiểm soát của người dùng đối với tính năng phát hiện múi giờ trong ứng dụng Cài đặt AOSP (Dự án nguồn mở Android).

*Trên Android 11 trở xuống, chế độ cài đặt này được gắn nhãn là Sử dụng múi giờ do mạng cung cấp

Vị trí Cài đặt AOSP (Dự án nguồn mở Android) Tên chế độ cài đặt AOSP (Dự án nguồn mở Android) Phạm vi Hành vi
Hệ thống > Ngày và giờ Tự động đặt múi giờ* Tất cả người dùng

Một nút bật/tắt.

Khi bật, thiết bị chịu trách nhiệm phát hiện múi giờ hiện tại. Khi bạn tắt, người dùng sẽ được cung cấp các chế độ kiểm soát để đặt múi giờ của thiết bị theo cách thủ công.

Hệ thống > Ngày và giờ Sử dụng vị trí để đặt múi giờ Người dùng hiện tại

Một nút bật/tắt.

Có trên Android 12. Nút bật/tắt này chỉ xuất hiện khi thiết bị có hỗ trợ tính năng phát hiện múi giờ theo vị trí.

Đối với những thay đổi được giới thiệu trong phiên bản 14, hãy xem Các thiết bị chỉ hỗ trợ tính năng phát hiện múi giờ theo vị trí.

Vị trí Sử dụng vị trí Người dùng hiện tại

Một nút bật/tắt.

Cho phép hoặc ngăn chặn việc sử dụng thông tin vị trí của thiết bị nói chung. Giá trị này có liên quan nếu tính năng phát hiện múi giờ theo vị trí được hỗ trợ trên thiết bị.

Nội dung sau đây cung cấp thông tin tổng quan về hành vi của thiết bị khi phát hiện múi giờ dựa trên chế độ cài đặt do người dùng chọn:

  • [Ngày và giờ] Tự động đặt múi giờ: TẮT

    • Người dùng phải tự chọn múi giờ.
  • [Ngày và giờ] Tự động đặt múi giờ: BẬT

    • [Vị trí] Sử dụng vị trí: TẮT

      • Tín hiệu điện thoại được dùng để phát hiện múi giờ.
    • [Vị trí] Sử dụng thông tin vị trí: BẬT

      • [Ngày và giờ] Sử dụng vị trí để đặt múi giờ: BẬT

        • Thông tin vị trí được dùng để phát hiện múi giờ.
      • [Ngày và giờ] Sử dụng vị trí để đặt múi giờ: TẮT

        • Tín hiệu điện thoại được dùng để phát hiện múi giờ.

Nhiều thiết bị của người dùng

Vì một số chế độ cài đặt có liên quan thuộc phạm vi của người dùng hiện tại, nên hành vi phát hiện múi giờ của thiết bị có thể thay đổi khi người dùng hiện tại thay đổi trên một thiết bị Android nhiều người dùng.

Nút bật/tắt Sử dụng vị trí để đặt múi giờ được giới hạn cho người dùng hiện tại và không bị hạn chế theo chính sách thiết bị, nghĩa là người dùng luôn có thể thay đổi giá trị của chế độ này, ngay cả khi nút bật/tắt Tự động đặt múi giờ đang tắt hoặc nếu các chế độ kiểm soát múi giờ hoặc múi giờ khác bị Trình kiểm soát chính sách thiết bị hạn chế.

Các thiết bị chỉ hỗ trợ thuật toán phát hiện múi giờ theo vị trí

Phần này mô tả hành vi của các thiết bị chỉ hỗ trợ thuật toán vị trí.

  • Android 14 trở lên

    • Người dùng không thấy tuỳ chọn Use location (Sử dụng vị trí) trong ứng dụng AOSP Settings (Cài đặt AOSP) và thiết bị sẽ hoạt động như thể tuỳ chọn Use location (Sử dụng vị trí) đang bật.
    • Giá trị của chế độ cài đặt SettingsProvider ở phạm vi người dùng location_time_zone_detection_enabled bị bỏ qua. Giá trị này ghi lại lựa chọn ưu tiên của người dùng trên các loại thiết bị khác.
  • Android 12 hoặc Android 13

    • Người dùng sẽ thấy tuỳ chọn Use location (Sử dụng vị trí) trong ứng dụng AOSP Settings (Cài đặt AOSP) và người dùng có thể tắt tuỳ chọn này. Nếu bạn tắt tuỳ chọn này, thiết bị sẽ không tự động phát hiện múi giờ.

Hành vi khi chuyển sang và từ chế độ phát hiện tự động

Khi người dùng chuyển tính năng phát hiện múi giờ từ thủ công sang tự động, time_zone_detector có thể đã chắc chắn về múi giờ hiện tại. Nếu có, khi người dùng bật tính năng tự động phát hiện, múi giờ của thiết bị có thể được thay đổi cùng lúc để phù hợp với ý kiến của dịch vụ time_zone_detector.

Tương tự, khi người dùng thay đổi phần Cài đặt dẫn đến thay đổi đối với thuật toán hiện tại của dịch vụ time_zone_detector, time_zone_detector có thể đã nhận được đề xuất cho thuật toán mới và vì vậy, thời gian của thiết bị có thể được thay đổi ngay lập tức để phù hợp với ý kiến của dịch vụ time_zone_detector.

Phát hiện múi giờ của điện thoại

Tính năng phát hiện múi giờ của điện thoại sử dụng các tín hiệu điện thoại để xác định múi giờ hiện tại. Để biết thêm thông tin, hãy xem bài viết Phát hiện múi giờ điện thoại.

Phát hiện múi giờ theo vị trí

Tính năng Phát hiện múi giờ của vị trí hoạt động trên Android 12 trở lên. Đây là một tính năng tự động phát hiện múi giờ (không bắt buộc), cho phép các thiết bị sử dụng thông tin vị trí của mình để xác định múi giờ hiện tại.

Dịch vụ location_time_zone_manager được giới thiệu trong Android 12, chạy trong máy chủ hệ thống và chứa mã chịu trách nhiệm gửi các đề xuất về thuật toán vị trí cho dịch vụ time_zone_detector. Để biết thêm thông tin, hãy xem bài viết Phát hiện múi giờ của vị trí.

Những điều cần cân nhắc khi sử dụng tính năng

Phần này mô tả các khía cạnh của tính năng phát hiện múi giờ theo vị trí để giúp nhà sản xuất thiết bị xác định xem có nên áp dụng tính năng này trên thiết bị hay không.

So sánh tính năng phát hiện điện thoại và vị trí

Bảng sau đây cung cấp thông tin so sánh các ưu điểm và nhược điểm của việc sử dụng thông tin vị trí thay vì tín hiệu điện thoại để phát hiện múi giờ.

Phát hiện điện thoại Phát hiện vị trí
Độ chính xác Thay đổi theo quốc gia.

Tuỳ thuộc vào MCC, NITZ có chính xác và có sẵn hay không.
Phụ thuộc vào cấu hình tính năng hoặc thành phần trình bổ trợ.

Độ chính xác thường thay đổi theo:
  • Độ chính xác và mức độ thường xuyên của nhà cung cấp vị trí.
  • Chất lượng của dữ liệu bản đồ múi giờ.
Khả năng cập nhật Tính năng phát hiện cuộc gọi điện thoại dựa vào các tệp có trong Mô-đun dữ liệu vùng thời gian có thể cập nhật (com.android.tzdata APEX). Phụ thuộc vào cấu hình tính năng hoặc thành phần trình bổ trợ.

Khả năng cập nhật thường phụ thuộc vào việc thiết bị sử dụng dữ liệu bản đồ múi giờ của máy chủ hay máy khách.

Lưu ý: Dữ liệu bản đồ múi giờ không có trong Mô-đun dữ liệu múi giờ dùng để cập nhật bản sao TZDB và các thông tin khác về múi giờ của Android.

Nhà sản xuất thiết bị cũng phải xem xét tính nhất quán của phiên bản giữa quy tắc múi giờ và dữ liệu bản đồ múi giờ.
Mức sử dụng năng lượng Không có hoặc có mức sử dụng pin thấp Tuỳ thuộc vào các chế độ cài đặt vị trí của người dùng, các trình bổ trợ đang được sử dụng và thường là những ứng dụng khác yêu cầu thông tin vị trí.
Phạm vi cung cấp Chỉ thiết bị điện thoại. Thường yêu cầu có SIM đang hoạt động. Tính năng phát hiện vị trí phụ thuộc vào các nhà cung cấp vị trí có sẵn.
Quyền riêng tư của người dùng

Múi giờ ưu tiên của người dùng thường được xác định theo vị trí địa lý của họ. Vị trí là dữ liệu nhạy cảm. Người dùng có thể lo ngại về việc thông tin vị trí của họ được chia sẻ trong quá trình phát hiện múi giờ. Không liên quan đến tính năng phát hiện múi giờ, tất cả ứng dụng chạy trên một thiết bị đều có thể đọc múi giờ hiện tại của thiết bị mà không cần quyền trên Android, đồng thời các ứng dụng có thể suy ra ý tưởng không chính xác về vị trí của thiết bị từ thông tin này.

Cụ thể hơn, tính năng phát hiện múi giờ có thể hoạt động theo cách thụ động hoặc chủ động, nghĩa là:

  • Thụ động: Nội dung nào đó trong môi trường của thiết bị cho thiết bị biết múi giờ để sử dụng trong môi trường đó.
  • Đang hoạt động: Thiết bị phải tự xác định múi giờ và tuỳ thuộc vào chế độ cài đặt quyền riêng tư của người dùng cũng như sự đồng ý của họ, thiết bị sẽ lấy thông tin vị trí của thiết bị để thực hiện việc này. Sau đó, thiết bị có thể chia sẻ thông tin vị trí của mình với các dịch vụ bên ngoài. Hãy xem nội dung thảo luận bên dưới để biết thông tin chi tiết về sự đồng ý và quyền riêng tư của người dùng.

Phương pháp phát hiện thụ động (chẳng hạn như với thuật toán điện thoại) không làm ảnh hưởng thêm đến quyền riêng tư của người dùng.

Hoạt động phát hiện chủ động (chẳng hạn như bằng thuật toán vị trí) bao gồm việc xác định vị trí của thiết bị (mà người dùng có thể không muốn đồng ý), sau đó vị trí có thể được gửi qua mạng để xác định mã múi giờ.

Phương pháp tiếp cận quyền riêng tư của người dùng của Android trong việc phát hiện múi giờ cho phép người dùng tắt từng thuật toán dự kiến sẽ hoạt động. Ngoài ra, mã nền tảng AOSP không trực tiếp xử lý thông tin vị trí: tính năng phát hiện vị trí và ánh xạ vị trí đến mã múi giờ sẽ do các thành phần trình bổ trợ do nhà sản xuất thiết bị định cấu hình.

Để biết thêm thông tin chi tiết về các tính năng liên quan đến quyền riêng tư của người dùng, hãy xem bài viết Phát hiện múi giờ theo vị trí.

Cấu hình

Nhà sản xuất thiết bị có thể định cấu hình dịch vụ time_zone_detector để thay đổi hành vi của dịch vụ đó. Phần này mô tả các tuỳ chọn cấu hình cho hành vi chung của dịch vụ time_zone_detector. Để biết thông tin chi tiết về cấu hình của các thuật toán phát hiện múi giờ và điện thoại, vui lòng xem phần Phát hiện múi giờ điện thoạiPhát hiện múi giờ vị trí.

Cấu hình AOSP cơ sở nằm ở frameworks/base/core/res/res/values/config.xml.

Khoá cấu hình Giá trị AOSP (Dự án nguồn mở Android) Nội dung mô tả
config_supportTelephonyTimeZoneFallback true Khi true, time_zone_detector sử dụng chế độ dự phòng điện thoại. Tính năng này có trên Android 13 trở lên.

Thay đổi hành vi mặc định của thiết bị

Trong AOSP, tính năng tự động phát hiện múi giờ được bật theo mặc định với chế độ cài đặt auto_time_zone được đặt thành true. Để tắt tính năng tự động phát hiện thời gian theo mặc định, hãy đặt giá trị của def_auto_time_zone được xác định trong frameworks/base/packages/SettingsProvider/res/values/defaults.xml thành false.

Khi khôi phục bản sao lưu từ một thiết bị khác, khung sẽ cập nhật giá trị của chế độ cài đặt auto_time_zone theo mặc định. Nếu bạn muốn đảm bảo rằng chế độ cài đặt này không được khôi phục từ bản sao lưu, hãy thêm auto_time_zone vào mảng restore_blocked_global_settings được xác định trong frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

Gỡ lỗi và thử nghiệm múi giờ

Phần này cung cấp thông tin về cách gỡ lỗi và kiểm thử hành vi của dịch vụ time_zone_detector cũng như các thành phần khác mà tất cả các thuật toán dùng chung.

Định cấu hình thiết bị bằng dịch vụ device_config

Dịch vụ device_config là một cơ chế dùng trên Android để định cấu hình hành vi có thể sửa đổi bằng cách sử dụng các giá trị thường được lấy từ một máy chủ từ xa bằng mã độc quyền (không phải AOSP). Khi sử dụng các giá trị device_config để kiểm thử, đặc biệt là trong thời gian dài kiểm thử thủ công, thiết bị có thể đồng bộ hoá cờ, thao tác này sẽ đặt lại cờ và xoá các giá trị được đặt cho việc kiểm thử.

Trong Android 12 trở lên, để tạm thời ngăn chặn quá trình đồng bộ hoá gắn cờ, hãy sử dụng:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Để khôi phục tính năng đồng bộ hoá cờ sau khi kiểm thử, hãy sử dụng:

adb shell cmd device_config set_sync_disabled_for_tests none

Sau khi khôi phục tính năng đồng bộ hoá cờ, hãy khởi động lại thiết bị.

Để biết thêm thông tin, hãy sử dụng $ adb shell cmd device_config help.

Tương tác với dịch vụ time_zone_detector

Để xem cấu hình và trạng thái time_zone_detector của dịch vụ time_zone_detector, hãy sử dụng:

adb shell cmd time_zone_detector dump

Để xem các lệnh khác dùng để gỡ lỗi và kiểm thử tính năng phát hiện múi giờ, hãy sử dụng:

adb shell cmd time_zone_detector help

Kết quả trợ giúp cũng mô tả các thuộc tính dịch vụ device_config có thể dùng để tác động đến hành vi của dịch vụ time_zone_detector cho mục đích kiểm thử hoặc trong phiên bản chính thức. Để biết thông tin chi tiết, hãy xem phần Định cấu hình thiết bị bằng dịch vụ device_config.

Để xác thực tính năng phát hiện múi giờ, người kiểm thử phải biết được time_zone_detector đang sử dụng thuật toán nào. Để hiểu và tác động đến thuật toán hiện tại của time_zone_detector, hãy sử dụng một trong các phương án sau:

  • Kiểm tra trực quan thông qua giao diện người dùng Cài đặt. Để biết thêm thông tin, hãy xem phần Cài đặt múi giờ.
  • Sử dụng dòng lệnh thông qua adb:

    • Để kết xuất trạng thái time_zone_detector, hãy sử dụng adb shell cmd time_zone_detector dump
    • Để thay đổi chế độ cài đặt thiết bị, hãy dùng các lệnh time_zone_detector khác. Để biết thêm thông tin, hãy sử dụng adb shell cmd time_zone_detector help.

Sau đây là ví dụ về kết quả của lệnh adb shell cmd time_zone_detector dump, với thông tin về thuật toán và trạng thái dịch vụ hiện tại được in đậm:

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

Thông tin này có thể được diễn giải như sau:

Khóa Giá trị
mUserConfigAllowed Liệu người dùng có bị Trình kiểm soát chính sách thiết bị ngăn chặn việc kiểm soát các chế độ cài đặt ngày và giờ hay không.
mTelephonyDetectionSupported Liệu thiết bị có phát hiện múi giờ của điện thoại hay không.
mGeoDetectionSupported Xem thiết bị có hỗ trợ tính năng phát hiện múi giờ theo vị trí hay không. Đây là trạng thái hiệu quả dựa trên cấu hình sự hiện diện của ít nhất một LTZP.
mAutoDetectionEnabled Liệu tính năng tự động phát hiện múi giờ có được bật hay không.
mLocationEnabled Nút bật/tắt vị trí chính.
mGeoDetectionEnabled Chuyển đổi thuật toán: false cho biết thuật toán điện thoại và true cho biết thuật toán vị trí.

Thông tin về nhật ký đề xuất cho biết những đề xuất đã được đưa ra thông qua phần Cài đặt (thủ công) cũng như bằng thuật toán điện thoại và vị trí.