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 múi giờ và thời gian trên Android. Điều này bao gồm cách Android tự động phát hiện thời gian và múi giờ, các tùy chọn cấu hình cho nhà sản xuất thiết bị và thông tin thử nghiệm.

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

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

  • Thời gian kỷ nguyên Unix hiện tại
  • Múi giờ hiện tại

Thời gian kỷ nguyên 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ị, nghĩa là chúng được chia sẻ bởi tất cả người dùng thiết bị.

Thời gian kỷ nguyên Unix hiện tại không phải là một giá trị cố định. Nó cập nhật tự động để phản ánh thời gian trôi qua. Bên cạnh thời gian trôi qua thông thường, thời gian kỷ nguyên Unix hiện tại của thiết bị sẽ được điều chỉnh nếu nó được phát hiện là không chính xác, chẳng hạn như 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 Unix hiện tại thành giờ địa phương. Ví dụ: vào mùa hè ở Los Angeles, thiết bị sẽ trừ đi 7 giờ so với thời gian của kỷ nguyên Unix hiện tại và vào mùa đông, thiết bị sẽ trừ đi 8 giờ.

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

Khi người dùng di chuyển đến một địa điểm mới sử dụng múi giờ khác, thời gian Unix hiện tại không cần phải điều chỉnh nhưng người dùng thường muốn xem giờ địa phương hơn là thời gian ở vị trí trước đó của họ. Việc thay đổi múi giờ hiện tại đảm bảo rằng độ lệch chính xác được áp dụng cho thời gian kỷ nguyên 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 thời gian và múi giờ có được đặt tự động cho họ hay không thông qua các cơ chế sau.

  • Tự động phát hiện thời gian: Đảm bảo rằng thiết bị có thời gian Unix hiện tại chính xác.
  • Tự động phát hiện múi giờ: Đảm bảo rằng thiết bị có múi giờ hiện tại chính xác.

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

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

Dịch vụ time_Detector

Dịch vụ time_detector hiện có trên các thiết bị chạy Android 10 trở lên, quản lý việc phát hiện thời gian tự động. Nó điều chỉnh thời gian kỷ nguyên Unix hiện tại của thiết bị khi 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 hai trạng thái: không chắc chắn hoặc chắc chắn . 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ởi các đề xuất về thời gian mà dịch vụ nhận được từ nhiều nguồn khác nhau.

Khi dịch vụ time_detector là chắc chắn, nghĩa là nó đã nhận được đề xuất với thông tin thời gian kỷ nguyên Unix, nó sẽ ghi đè thời gian kỷ nguyên Unix hiện tại nếu đề xuất thời gian khác với thời gian kỷ nguyên Unix hiện tại.

Khi time_detector không chắc chắn, nó 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 trở nên không chắc chắn nếu các đề xuất mà nó nhận được được coi là quá cũ để sử dụng. Độ tuổi của đề xuất được xem xét vì các điều chỉnh sử dụng đề xuất thời gian kỷ nguyên Unix cũ dựa vào đồng hồ thời gian thực đã trôi qua trên thiết bị, được cho là không chính xác trong thời gian dài.

Để tự động thiết lập thời gian kỷ nguyên Unix hiện tại, một thiết bị có thể sử dụng nhiều nguồn khác nhau. Đây được gọi là nguồn gốc trong tài liệu này. Dịch vụ time_detector coi các chuỗi đề xuất là khác biệt dựa trên nguồn gốc của chúng.

Dịch vụ time_detector có trạng thái, nghĩa là nó lưu giữ bản ghi về đề xuất gần đây nhất được thực hiện bởi mỗi nguồn. Các đề xuất mới được đưa ra cho time_detector nếu nguồn gốc có sẵn thông tin về thời gian kỷ nguyên Unix gần đây hơn. Dịch vụ time_detector đá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 phạm vi quốc tế nhưng có nhiều lý do khiến việc thiết lập thời gian kỷ nguyên 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 kỷ nguyên Unix là một hệ thống chấm công khác biệt một chút so với thời gian UTC. Việc chuyển đổi giữa hai loại này đòi hỏi kiến ​​thức về thời điểm xảy ra giây nhuận và cách chúng được xử lý theo nguồn gốc.
  • Nguồn gốc có thể chỉ có sẵn vào những thời điểm nhất định hoặc trong những 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ì nó có thể chỉ khả dụng khi thiết bị được kết nối với Internet.
  • Nguồn gốc có thể không chính xác, thiếu chính xác hoặc có sai sót. Ví dụ: nếu tháp di động điện thoại không theo dõi chính xác "giờ quốc tế" thì nguồn gốc của điện thoại có thể cung cấp đề xuất thời gian không chính xác.
  • Có thể có những điểm không chính xác được đưa ra khi lấy thời gian kỷ nguyên Unix. Ví dụ: độ trễ mạng, bộ đệm hoặc lập lịch xử lý có thể khiến thời gian kỷ nguyên Unix không chính xác.
  • Đồng hồ tham chiếu được sử dụng để điều chỉnh đề xuất về thời gian đã trôi qua kể từ khi nhận được đề xuất có thể không chính xác.

Có hai 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 điện thoại và mạng đều yêu cầu kết nối với mạng bên ngoài, mạng này không phải lúc nào cũng khả dụng.

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

  • GNSS : Sử dụng 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 các nhà sản xuất thiết bị tích hợp nguồn thời gian kỷ nguyên Unix của riêng họ.

Cài đặt thời gian

Người dùng có thể bật tính năng phát hiện thời gian tự động trong Hệ thống > Ngày và Giờ trong ứng dụng Cài đặt AOSP.

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

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

Bảng sau mô tả các điều khiển của người dùng để phát hiện thời gian trong ứng dụng Cài đặt AOSP.

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

Vị trí cài đặt AOSP Tên cài đặt AOSP Phạm vi Hành vi
Hệ thống > Ngày và Giờ Đặt thời gian tự động* Tất cả người dùng

Một sự chuyển đổi.

Khi bật , thiết bị có nhiệm vụ phát hiện thời gian Unix hiện tại. Khi tắt , người dùng được cung cấp các điều khiển để cài đặ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ọ nhập giờ địa phương chứ không phải thời gian kỷ nguyên Unix. Thời gian kỷ nguyên 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 kỷ nguyên Unix.

Cấu hình

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 khác nhau, chẳng hạn như sử dụng nguồn gốc nào và cách ưu tiên tín hiệu từ chúng.

Ưu tiên xuất xứ

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 thời gian nào sẽ được đưa vào tính năng phát hiện thời gian tự động và mức độ ưu tiên mà time_detector xem xét các 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 nguồn gốc được mã hóa cứng thành ["telephony", "network"] , nghĩa là các đề xuất về điện thoại được ưu tiên hơn các đề xuất mạng.

Cấu hình AOSP mặc định như sau:

<!-- 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 thời gian trên mạng được ưu tiên hơn đề xuất về thời gian trên điện thoại. Các nhà sản xuất thiết bị có thể thay đổi thứ tự nguồn gốc để quay lại hoạt động trong Android 11 trở xuống, trong đó điện thoại được ưu tiên cao 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 của thiết bị sẽ không bị 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 tuân theo mục đích ACTION_TIME_CHANGED .

Các giá trị gốc được phép là:

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

Android 14 giới thiệu 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ợ 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 thời gian có thể gây ra sự cố Y2038.

Android 12 đã giới thiệu 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 thấp hơn dùng cho đề xuất tự động được đặt từ dấu thời gian xây dựng. Điều này hoạt động dựa trên nguyên tắc không thể có thời gian hợp lệ trước khi hình ảnh hệ thống của thiết bị được tạo. Nếu đề xuất thời gian nằm trước giới hạn thời gian thấp hơn thì dịch vụ time_detector sẽ loại bỏ đề xuất vì đề xuất đó không hợp lệ nếu dấu thời gian xây 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 không xác thực các đề xuất về thời gian kỷ nguyên Unix sắp tới.

Thời gian gỡ lỗi và thử nghiệm

Phần này cung cấp thông tin về cách gỡ lỗi và kiểm tra hoạt động của dịch vụ time_detector và các thành phần khác được chia sẻ bởi tất cả các nguồn gốc.

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

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

adb shell cmd time_detector dump

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

adb shell cmd time_detector help

Đầu ra trợ giúp cũng mô tả các thuộc tính dịch vụ device_config có thể được sử dụng để tác động đến hoạt động của time_detector để thử nghiệm hoặc trong sản xuất. Để biết chi tiết, hãy xem Đị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 tra phải biết dịch vụ time_detector đang sử dụng nguồn gốc nào. Sau đây là ví dụ về kết quả đầu ra từ lệnh adb shell cmd time_detector dump , với 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 có thể được hiểu như sau:

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

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

Thông tin lịch sử gợi ý cho biết những gợi ý nào đã được đưa ra bởi mỗi nguồn.

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 quản lý việc phát hiện múi giờ tự động, kiểm soát người dùng trong cài đặt, phát hiện múi giờ qua điện thoại và vị trí cũng như chi tiết kiểm tra.

Dịch vụ time_zone_Detector

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

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

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 múi giờ rõ ràng, điều 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à nó không nhận được thông tin hoặc chỉ nhận được thông tin có độ tin cậy thấp, nghĩa là nó sẽ không ghi đè múi giờ hiện tại.

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

  • Một trạng thái nhất định có múi giờ bằng 0 được nhập khi thiết bị ở 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 khu vực 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 nào để cố gắng xác định múi giờ.
  • Một trạng thái nhất định có nhiều múi giờ được nhập khi có điều kiện không rõ ràng hoặc biên giới. Ở trạng thái này, nếu múi giờ hiện tại là một trong các múi giờ mà 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 yếu tố cố định nếu người dùng đã chọn múi giờ của họ theo cách thủ công trước đó hoặc khi thiết bị tiến gần đến đườ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 bởi các đề xuất múi giờ được gửi bằng thuật toán .

Nói chung, các đề xuất có hai loại phù hợp nhất 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 gợi ý:

  • 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 khu vực đó là Châu Âu/London.
  • loại = certain , zoneIds = [] `

    • Thuật toán là chắc chắn nhưng không có ID vùng nào được liên kết với vị trí hiện tại.
  • type = 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 hai khu vực, nhưng không thể chọn giữa "America/Denver" và "America/Phoenix".

Dịch vụ time_zone_detector xử lý các chuỗi đề xuất riêng biệt dựa trên thuật toán của chúng. Tùy 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 mức độ chắc chắn của thuật toán.

Dịch vụ time_zone_detector có trạng thái, nghĩa là nó lưu giữ bản ghi về đề xuất gần đây nhất được thực hiện bởi mỗi thuật toán. Đề xuất mới đượ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 nếu thuật toán mất khả năng phát hiện múi giờ. Dịch vụ time_zone_detector đá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.

Android hỗ trợ hai 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 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ừ ​​thuật toán khác. Các đề xuất liên quan đến thuật toán không được sử dụng có thể được lưu trong bộ nhớ bởi time_zone_detector nhưng chúng không được sử dụng trừ khi thuật toán thay đổi. Khi người dùng thay đổi cài đặt để phát hiện múi giờ tự động và thuật toán thay đổi, đề xuất gần đây nhất có sẵn cho thuật toán mới sẽ được sử dụng.

Để biết chi tiết về tình huống sử dụng nhiều thuật toán để xác định múi giờ, hãy xem Chế độ dự phòng điện thoại .

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

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 đề xuất phát hiện qua điện thoại trong 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 qua đ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 điện thoại và vị trí và khi người dùng đã bật Sử dụng vị trí để đặt múi giờ trong Cài đặt múi giờ . Chế độ này được bật tự động khi thiết bị được khởi động lại và khi chế độ trên máy bay bị tắt.

Trong 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 LTZP báo cáo điều đó là không chắc chắn khả năng phát hiện vị trí hoặc múi giờ bị suy giảm do môi trường của nó thì chế độ dự phòng điện thoại sẽ được kích hoạt.

Khi ở chế độ dự phòng điện thoại, dịch vụ time_zone_detector sử dụng đề 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 đề 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ẽ bị tắt và đề xuất vị trí sẽ chỉ được sử dụng riêng.

Để biết chi tiết cấu hình cho chế độ dự phòng điện thoại, hãy xem 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ài đặt để phát hiện múi giờ tự động trong ứng dụng Cài đặt AOSP.

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

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

Bảng sau mô tả các điều khiển của người dùng để phát hiện múi giờ trong ứng dụng Cài đặt AOSP.

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

Vị trí cài đặt AOSP Tên cài đặt AOSP Phạm vi Hành vi
Hệ thống > Ngày và giờ Đặt múi giờ tự động* Tất cả người dùng

Một sự chuyển đổi.

Khi bật , thiết bị có nhiệm vụ phát hiện múi giờ hiện tại. Khi tắt , người dùng được cung cấp các điều khiển để đặ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 sự chuyển đổi.

Có sẵn từ Android 12. Nút chuyển đổi này chỉ hiển thị khi tính năng phát hiện múi giờ của vị trí được hỗ trợ trên thiết bị.

Để biết những thay đổi được giới thiệu trong phần 14, hãy xem Thiết bị chỉ hỗ trợ phát hiện múi giờ vị trí .

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

Một sự chuyển đổi.

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

Phần sau đây cung cấp thông tin tổng quan về hoạt động của thiết bị để phát hiện múi giờ dựa trên 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 chọn múi giờ theo cách thủ công.
  • [Ngày và giờ] Đặt múi giờ tự động: BẬT

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

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

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

        • Vị trí được sử 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 sử dụng để phát hiện múi giờ.

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

Vì một số cài đặt liên quan nằm trong phạm vi 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 thiết bị Android nhiều người dùng.

Nút chuyển đổi Sử dụng vị trí để đặt múi giờ nằm ​​trong phạm vi người dùng hiện tại và không bị hạn chế bởi chính sách thiết bị, nghĩa là người dùng luôn có thể thay đổi giá trị của nó, ngay cả khi nút chuyển đổi Tự động đặt múi giờ tắt hoặc nếu các tùy chọn kiểm soát múi giờ hoặc thời gian khác bị hạn chế bởi Bộ điều khiển chính sách thiết bị.

Các thiết bị chỉ hỗ trợ thuật toán phát hiện múi giờ 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

    • Tùy chọn Sử dụng vị trí không được hiển thị cho người dùng trong ứng dụng Cài đặt AOSP và thiết bị hoạt động như thể tùy chọn Sử dụng vị trí được bật.
    • Giá trị của SettingsProvider cài đặt trong phạm vi người dùng location_time_zone_detection_enabled bị bỏ qua. Giá trị này ghi lại tùy chọn của người dùng trên các loại thiết bị khác.
  • Android 12 hoặc Android 13

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

Hành vi khi thay đổi sang và từ phát hiện tự động

Khi người dùng chuyển 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 vậy, vì người dùng bật tính năng phát hiện tự động, 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 thực hiện thay đổi trong Cài đặt dẫn đến thay đổ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à do đó thời gian của thiết bị có thể được thay đổi để phù hợp với ý kiến ​​của dịch vụ time_zone_detector ngay lập tức.

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

Phát hiện múi giờ qua điện thoại sử dụng 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 Phát hiện múi giờ của điện thoại .

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

Tính năng phát hiện múi giờ vị trí có sẵn trên Android 12 trở lên. Đây là tính năng phát hiện múi giờ tự động tùy chọn cho phép các thiết bị sử dụng vị trí của chúng để 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 trên máy chủ hệ thống và chứa mã chịu trách nhiệm gửi đề xuất thuật toán vị trí tới dịch vụ time_zone_detector . Để biết thêm thông tin, hãy xem Phát hiện múi giờ vị trí .

Cân nhắc áp 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ờ vị trí để giúp nhà sản xuất thiết bị xác định xem có áp dụng tính năng này trên thiết bị hay không.

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

Bảng sau đây cung cấp sự so sánh về ưu điểm và nhược điểm của việc sử dụng tín hiệu 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í
Tính đúng đắn Khác nhau tùy theo quốc gia.

Phụ thuộc vào tính chính xác và tính sẵn có của MCC, NITZ.
Phụ thuộc vào cấu hình tính năng hoặc các thành phần plug-in.

Độ chính xác thường thay đổi theo:
  • Độ chính xác và đều đặ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 điện thoại dựa vào các tệp có trong mô-đun Dữ liệu Múi giờ 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 các thành phần plug-in.

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ờ được sử dụng để cập nhật bản sao TZDB của Android và thông tin múi giờ khác.

Các 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 các quy tắc múi giờ và dữ liệu bản đồ múi giờ.
sử dụng điện năng Không có hoặc sử dụng năng lượng thấp Phụ thuộc vào cài đặt vị trí của người dùng, plugin đang được sử dụng và thông thường những ứng dụng khác yêu cầu vị trí.
khả dụng Chỉ các thiết bị điện thoại. Thường yêu cầu SIM hoạt độ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ờ ưa thích của người dùng thường được xác định bởi 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ề vị trí của họ được chia sẻ như một phần của việc phát hiện múi giờ. Không liên quan đến việc phát hiện múi giờ, tất cả các ứng dụng chạy trên thiết bị đều có thể đọc múi giờ hiện tại của thiết bị mà không cần có sự cho phép của Android và 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, việc phát hiện múi giờ có thể hoạt động thông qua các phương tiện thụ động hoặc chủ động:

  • Bị động: Nội dung nào đó trong môi trường của thiết bị sẽ cho thiết bị biết múi giờ sẽ 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à tùy thuộc vào cài đặt quyền riêng tư của người dùng và sự đồng ý của họ, thiết bị sẽ lấy được vị trí của thiết bị để thực hiện việc đó. Sau đó nó có thể chia sẻ vị trí của nó với các dịch vụ bên ngoài. Xem phần thảo luận bên dưới để biết chi tiết về quyền riêng tư và sự đồng ý của người dùng.

Tính năng phát hiện thụ động, chẳng hạn như với thuật toán điện thoại, không có tác động bổ sung nào đến quyền riêng tư của người dùng.

Việc phát hiện chủ động, chẳng hạn như với 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 ý và vị trí đó có thể được gửi qua mạng để xác định ID 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 để phát hiện múi giờ cung cấp cho người dùng khả năng vô hiệu hóa riêng các thuật toán dự kiến ​​sẽ hoạt động. Ngoài ra, mã nền tảng AOSP không xử lý trực tiếp với chính vị trí: việc phát hiện vị trí và ánh xạ vị trí theo ID múi giờ được để lại cho các thành phần plugin được nhà sản xuất thiết bị định cấu hình.

Để biết thêm chi tiết về các tính năng bảo mật của người dùng, hãy xem Phát hiện múi giờ của 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ụ này. Phần này mô tả các tùy chọn cấu hình cho hoạt động chung của dịch vụ time_zone_detector . Để biết chi tiết cấu hình cho các thuật toán phát hiện điện thoại và múi giờ, hãy xem 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ở là ở frameworks/base/core/res/res/values/config.xml .

Phím cấu hình Giá trị AOSP Sự miêu 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ó sẵn cho Android 13 trở lên.

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

Trong AOSP, tính năng phát hiện múi giờ tự động được bật theo mặc định với 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ừ thiết bị khác, khung sẽ cập nhật giá trị của cài đặt auto_time_zone theo mặc định. Nếu bạn muốn đảm bảo rằng cài đặt này không được khôi phục từ bản sao lưu, hãy đưa 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à kiểm tra múi giờ

Phần này cung cấp thông tin về cách gỡ lỗi và kiểm tra hoạt động của dịch vụ time_zone_detector và các thành phần khác được chia sẻ bởi tất cả các thuật toán.

Đị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ế được sử 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á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 tra, đặc biệt là trong quá trình kiểm tra thủ công kéo dài, thiết bị có thể đồng bộ hóa các cờ, việc này sẽ đặt lại các cờ và xóa các giá trị đã đặt để kiểm tra.

Trong Android 12 trở lên, để tạm thời ngăn chặn việc đồng bộ hóa cờ, hãy sử dụng:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Để khôi phục đồng bộ hóa cờ sau khi kiểm tra, hãy sử dụng:

adb shell cmd device_config set_sync_disabled_for_tests none

Sau khi khôi phục đồng bộ hóa 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 time_zone_detector và trạng thái 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 bổ sung để gỡ lỗi và kiểm tra tính năng phát hiện múi giờ, hãy sử dụng:

adb shell cmd time_zone_detector help

Đầu ra trợ giúp cũng mô tả các thuộc tính dịch vụ device_config có thể được sử dụng để tác động đến hoạt động của dịch vụ time_zone_detector để thử nghiệm hoặc trong sản xuất. Để biết chi tiết, hãy xem Đị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 tra phải biết thuật toán time_zone_detector đang sử dụng. Để 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 tùy chọ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 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 cài đặt thiết bị, hãy sử 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ả đầu ra từ lệnh adb shell cmd time_zone_detector dump , với thông tin về thuật toán hiện tại và trạng thái dịch vụ đượ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 có thể được hiểu như sau:

Chìa khóa Giá trị
mUserConfigAllowed Liệu người dùng có bị Bộ điều khiển chính sách thiết bị ngăn kiểm soát cài đặt ngày và giờ hay không.
mTelephonyDetectionSupported Liệu thiết bị có phát hiện múi giờ điện thoại hay không.
mGeoDetectionSupported Liệu thiết bị có hỗ trợ phát hiện múi giờ 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 phát hiện múi giờ tự động có được bật hay không.
mLocationEnabled Chuyển đổi vị trí chính.
mGeoDetectionEnabled Công tắc thuật toán: false biểu thị thuật toán điện thoại và true biểu thị thuật toán vị trí.

Thông tin lịch sử đề xuất cho biết những đề xuất nào đã được thực hiện thông qua Cài đặt (thủ công) cũng như bằng thuật toán điện thoại và vị trí.