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. Chiến dịch này bao gồm cách Android tự động phát hiện giờ và múi giờ, 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 cho các vị trí hiển thị, chẳng hạn như trạng thái thanh, Android theo dõi hai trạng thái có 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à chúng được dùng chung cho tất cả người dùng thiết bị.
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. Ứng dụng sẽ tự động cập nhật thành phản ánh thời gian trôi qua. Ngoài khoảng thời gian thông thường, thời gian Thời gian bắt đầu của hệ thống Unix của một thiết bị sẽ được điều chỉnh nếu hệ thống phát hiện thấy thời gian này không chính xác, đối với ví dụ 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 bắt đầu của hệ thống Unix hiện tại thành giờ địa phương. Ví dụ: vào mùa hè ở Los Angeles, thiết bị này trừ đi 7 giờ trong thời gian bắt đầu của hệ thống Unix hiện tại, và theo mùa đông giảm đi 8 giờ.
Để hỗ trợ những phép tính theo giờ địa phương này, tất cả thiết bị Android đều có một cơ sở dữ liệu của tất 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 vị trí mới sử dụng múi giờ khác, thời gian bắt đầu của hệ thống Unix hiện tại không cần điều chỉnh, nhưng người dùng thường muốn để xem giờ địa phương thay vì thời gian ở vị trí trước đó của họ. Đang thay đổi múi giờ hiện tại đảm bảo rằng mức chênh lệch chính xác sẽ được áp dụng cho múi giờ hiện tại Thời gian bắt đầu của hệ thống Unix để 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 việc thời gian và múi giờ đặt tự động cho chúng thông qua các cơ chế sau.
- Phát hiện thời gian tự động: Đảm bảo rằng thiết bị có đúng 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 rằng thiết bị có chính xác 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ự động phát hiện thời gian, kiểm soát người dùng, tuỳ chọn cấu hình và thử nghiệm
chi tiết.
Dịch vụ time_detector
Chiến lược phát hành đĩa đơn
time_detector
dịch vụ, có trên các thiết bị chạy Android 10 trở lên, quản lý thời gian tự động
của bạn. 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
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
một số điều 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
theo đề xuất thời gian nhận được từ nhiều nguồn.
Khi dịch vụ time_detector
chắc chắn, nghĩa là dịch vụ đó đã nhận được
với thông tin về thời gian bắt đầu của hệ thống Unix, hệ thống 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. Chiến lược phát hành đĩa đơn
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 thời gian
nội dung đề xuất. Dịch vụ time_detector
cũng không chắc chắn liệu các đề xuất có được đề xuất hay không
nhận được bị coi là quá cũ để sử dụng. Độ tuổi của đề xuất là
bởi vì cá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ị, được giả định là không chính xác trong
trong 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ó nhiều
nguồn mà công cụ đó có thể sử dụng. Những nguồn này được gọi là nguồn gốc trong tài liệu này. Chiến lược phát hành đĩa đơn
Dịch vụ của time_detector
coi trình tự các đề 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à dịch vụ này lưu bản ghi về
đề xuất gần đây nhất của từng nguồn gốc. Đã tạo các đề xuất mới 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
sẵn có. Dịch vụ time_detector
đánh giá lại các nội dung đề 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 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 chúng được nguồn gốc xử lý.
- Nguồn gốc có thể chỉ có sẵn tại một số thời điểm hoặc theo một số trong trường hợp cụ thể. Ví dụ: nếu máy chủ gốc yêu cầu kết nối mạng, ứng dụng 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. Cho ví dụ: nếu trạm phát sóng điện thoại không theo dõi "thời gian toàn cầu" đúng cách, nguồn gốc điện thoại có thể đưa ra đề xuất 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, lưu vào bộ đệm hoặc lên lịch tiến trình có thể gây ra thời gian bắt đầu của hệ thống Unix là không chính xác.
- Đồng hồ tham chiếu được dùng để điều chỉnh đề xuất cho thời gian đã trôi qua kể từ đề xuất nhận được 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 (Dự án nguồn mở Android):
- Mạng: Sử dụng mạng Máy chủ thời gian Giao thức thời gian (NTP).
- Điện thoại: Sử dụng thông tin nhận dạng mạng và điện thoại Múi giờ (NITZ) tín hiệu.
Cả nguồn gốc điện thoại lẫn mạng đều yêu cầu kết nối với mạng bên ngoài, mà không phải lúc nào cũng có sẵn.
Kể từ Android 12, Android cũng hỗ trợ các nguồn gốc không được định cấu hình để sử dụng theo mặc định:
- GNSS: Sử dụng GPS nhà cung cấp vị trí để lấy thời gian từ một nguồn GNSS.
- Bên ngoài: Chung 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à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 phần Hệ thống > Ngày và giờ trong Ứng dụng Cài đặt AOSP (Dự án nguồn mở Android).
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 AOSP (Dự án nguồn mở Android) Ứng dụng Cài đặt.
*Trên Android 11 trở xuống, chế độ 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 (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ị sẽ chịu trách nhiệm phát hiện Unix hiện tại thời gian bắt đầu của hệ thống. Khi bạn tắt, người dùng sẽ được cung cấp các quyền 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 bất cứ lúc nào. 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
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 tín hiệu từ các 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
core/res/res/values/config.xml
tệp cấu hình để chỉ định thời gian
nguồn gốc cần đưa vào phát hiện thời gian tự động và mức độ ưu tiên mà trong đó
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 của máy chủ gốc được mã hoá cứng thành ["telephony", "network"]
, tức là các đề xuất về điện thoại sẽ được ưu tiên
phía trên đề xuất 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 là được định cấu hình làm nguồn gốc để sử dụng theo mặc định. Các đề xuất về thời gian mạng là được ưu tiên trên các đề xuất thời gian điện thoại. Nhà sản xuất thiết bị có thể thay đổi thứ tự của các nguồn gốc quay về hành vi 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 đề xuất của thiết bị
thời gian theo đồng hồ hiện tại của hệ thống xuống còn vài giây, thì thời gian trên 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 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 ra mắt giới hạn thời gian trên
đề xuất mà dịch vụ time_detector
nhận được. Nếu thiết bị hỗ trợ
Các quy trình 32 bit, khung này 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ể kích hoạt sự cố Y2038.
Android 12 ra mắt giới hạn thời gian ngắn hơn được dùng để
xác thực thông tin đề xuất về thời gian mà dịch vụ time_detector
nhận được. Càng thấp
giá trị giới hạn thời gian dùng cho đề 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 thời gian hợp lệ không được trước thời gian
đã tạo được hình ảnh hệ thống. Nếu đề xuất thời gian trước giới hạn thời gian dưới,
Dịch vụ của time_detector
sẽ loại bỏ đề xuất này 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
và 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
Cách xem cấu hình và trạng thái của dịch vụ time_detector
Dịch vụ time_detector
, 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ể
dùng để ảnh hưởng đến hành vi của time_detector
cho mục đích kiểm thử hoặc phát hành chính thức.
Để biết thông tin 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 thử phải biết được nguồn gốc nào
Dịch vụ time_detector
đang được sử dụng. Sau đây là ví dụ về kết quả 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 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 mà dịch vụ time_detector
có
đã 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 lịch sử đề xuất cho biết đề xuất nào đã được đưa ra bởi từng nguồn gốc.
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ý tính năng tự động phát hiện múi giờ, kiểm soát của người dùng trong phần cài đặt, điện thoại và
phát hiện múi giờ theo vị trí và thông tin chi tiết về thử nghiệm.
Dịch vụ time_zone_detector
Chiến lược phát hành đĩa đơn
time_zone_detector
dịch vụ, có trên các thiết bị chạy Android 11 trở lên, quản lý thời gian tự động
phát hiện vùng. Chế độ này điều chỉnh múi giờ hiện tại của thiết bị khi cần
tính năng tự động phát hiện múi giờ đã được 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ắn và nhấ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 múi giờ mạnh
có thể khiến múi giờ bị chồng lên múi giờ hiện tại. Khi không chắc chắn, điều này
có nghĩa là 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,
có nghĩa là 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 mà
time_zone_detector
không có thông tin múi giờ để sử dụng hoặc ở nơi có
nhiều múi giờ để lựa chọn. Các trạng thái này như sau:
- Hệ thống sẽ nhập một trạng thái nhất định không có múi giờ vào khi thiết bị
ở một nơi nào đó không có múi giờ, chẳng hạn như trong 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 bất định, nhưng biểu thị
rằng
time_zone_detector
không cần làm gì thêm để cố gắng xác định múi giờ. - Một tiểu bang nhất định có nhiều múi giờ được nhập vào nơi có
tình trạng không rõ ràng hoặc biên giới. Trong trạng thái này, nếu múi giờ hiện tại là
một trong những múi giờ mà
time_zone_detector
chắc chắn múi giờ hiện tại vẫn giữ nguyên. Nếu không, một trong những thời gian còn lại các vùng được sử dụng. Điều này khiếntime_zone_detector
trở thành yếu tố gắn bó nếu trước đó người dùng đã tự chọn múi giờ của họ hoặc 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 bằng
đề xuất về múi giờ được gửi bằng một thuật toán.
Nhìn chung, nội dung đề xuất có hai loại gần giống với các trạng thái có thể có
trên time_zone_detector
: nhất định và khô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 chắc chắn, nhưng không có mã vùng nào được 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 hai 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à khác biệt
dựa trên thuật toán của họ. 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. Đã gửi đề xuất mới
cho dịch vụ time_zone_detector
nếu nội dung đề xuất trước đó không còn tồn tại
chính xác; tức là nếu thuật toán hiện có đề xuất khác hoặc nếu
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ợ 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 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 được xác định dựa trên
Chế độ cài đặt múi giờ do người dùng thiết lập. 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. Nội dung đề xuất
được liên kết với các thuật toán không được sử dụng có thể được giữ lại trong bộ nhớ bằng
time_zone_detector
nhưng sẽ không được 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 có sẵn cho
thuật toán mới được sử dụng.
Để biết thông tin chi tiết về trường hợp nhiều thuật toán được sử dụng để xác định múi giờ, xem Chế độ điện thoại dự phòng.
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ế độ điện thoại dự phòng. 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 những tình huống mà
tính năng phát hiện vị trí không thể phát hiện múi giờ hoặc vị trí 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ị được cả điện thoại và vị trí phát hiện có được hỗ trợ và trong trường hợp 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 đang bật tự động khi khởi động lại thiết bị và khi tắt chế độ trên máy bay.
Trong Android 14 trở lên, bạn có thể dùng tính năng điện thoại dự phòng được kích hoạt thông qua API báo cáo trạng thái LTZP, tức là, nếu một LTZP báo cáo thì nó không chắc chắn và khả năng phát hiện vị trí của nó hoặc múi giờ bị suy giảm do môi trường, chế độ điện thoại dự phòng là đã kích hoạt.
Khi ở chế độ dự phòng của điện thoại, dịch vụ time_zone_detector
sử dụng điện thoại
các đề xuất như thể tính năng phát hiện vị trí bị tắt cho đến 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, điện thoại
chế độ dự phòng bị tắt và đề xuất vị trí chỉ được sử dụng.
Để biết thông tin chi tiết về cấu hình cho chế độ điện thoại dự phòng, 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 chế độ cài đặt cho tính năng tự động phát hiện múi giờ trong ứng dụng AOSP Settings (Cài đặt AOSP)
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 quyền 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 sẽ được gắn nhãn 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ị sẽ chịu trách nhiệm phát hiện thời gian hiện tại vùng. 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ờ 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 là 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ị. Đối với các thay đổi được giới thiệu trong Android 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ị là 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ị. |
Nội dung sau đây cung cấp thông tin tổng quan về hành vi của thiết bị đối với 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 thời gian vùng.
Nhiều thiết bị của người dùng
Do một số chế độ cài đặt có liên quan đều 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 các thay đổi trên 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 dành cho 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 ngay cả khi nút bật/tắt Tự động đặt múi giờ bị tắt hoặc nếu thời gian hoặc múi giờ sẽ bị hạn chế bởi Trình kiểm soát chính sách thiết bị.
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ợ thông tin vị trí thuật toán.
Android 14 trở lên
- Người dùng không thấy tuỳ chọn Use location (Sử dụng vị trí) trong phần Cài đặt AOSP (Dự án nguồn mở Android) và thiết bị hoạt động như thể tuỳ chọn Use location (Sử dụng vị trí) được bật.
- Giá trị của chế độ cài đặt
SettingsProvider
trong phạm vi người dùnglocation_time_zone_detection_enabled
sẽ 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 tuỳ 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 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,
Có thể time_zone_detector
đã 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ể thay đổi
đồng thời để 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 đố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, do đó, thời gian của thiết bị
có thể 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ờ 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 dòng điện múi giờ. Để biết thêm thông tin, hãy xem bài viết Múi giờ điện thoại Phát hiện.
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ờ, cho phép thiết bị sử dụng vị trí của chúng nhằm 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ủ của hệ thống và chứa mã chịu trách nhiệm gửi thông tin vị trí
các đề xuất thuật toán cho dịch vụ time_zone_detector
.
Để biết thêm thông tin, hãy xem
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 dưới đây cung cấp so sánh các ưu và nhược điểm của sử dụng 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 tính chính xác và khả năng sử dụng của MCC, NITZ. |
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:
|
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 Thời gian có thể cập nhật Mô-đun dữ liệu vùng (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ị dùng máy chủ hay ứng dụng dữ liệu bản đồ múi giờ. Lưu ý: Dữ liệu bản đồ múi giờ không có trong Thời gian Mô-đun dữ liệu vùng được dùng để cập nhật bản sao TZDB của Android và thời gian khác thông tin vùng. 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 | Phụ thuộc vào các cài đặt vị trí của người dùng, các plugin đang được sử dụng và thông thường 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ờ ưa thích của người dùng thường được xác định theo vị trí địa lý của họ vị trí. Vị trí là dữ liệu nhạy cảm. Người dùng có thể lo ngại về kiến thức về vị trí của họ sẽ được chia sẻ như một phần của tính năng 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ả cá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 truy cập Android và ứng dụng có thể suy ra ý tưởng không chính xác về vị trí của thiết bị dựa vào 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 chế độ thụ động hoặc chủ động có 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ư và sự đồng ý của họ, sẽ có được vị trí của thiết bị để làm điều đó. Sau đó, ứng dụng có thể chia sẻ thông tin vị trí của mình với các ứng dụng bên ngoài luôn miễn phí. 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át hiện thụ động, chẳng hạn như với thuật toán điện thoại, không có thêm quyền riêng tư đối với người dùng.
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 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ờ mang lại cho người dùng khả nă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 xử lý trực tiếp với vị trí: Tính năng phát hiện vị trí và ánh xạ vị trí tới mã múi giờ sẽ phụ thuộc vào trình bổ trợ các thành phần do 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 vệ quyền riêng tư của người dùng, hãy xem Múi giờ của vị trí Phát hiện.
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 nó. Phần này mô tả các tuỳ chọn cấu hình cho
hành vi của dịch vụ time_zone_detector
. Để biết thông tin chi tiết về cấu hình của
thuật toán phát hiện điện thoại và múi giờ, xem
Phát hiện múi giờ điện thoại
và
Phát hiện múi giờ cho vị trí.
Cấu hình AOSP cơ sở ở
frameworks/base/core/res/res/values/config.xml
.
Khoá cấu hình | Giá trị AOSP (Dự án nguồn mở Android) | Mô tả |
---|---|---|
config_supportTelephonyTimeZoneFallback |
true |
Khi true , time_zone_detector sử dụng điện thoại
chế độ dự phòng. Tính năng này có trên Android 13
và cao hơ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 bằng
Đã đặt chế độ cài đặt auto_time_zone
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
đến 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
cài đặt 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à 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
và các thành phần khác mà tất cả mọi người dùng chung
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ế 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 thử,
đặc biệt là trong các thử nghiệm thủ công lâu dài, thiết bị có thể đồng bộ hoá
cờ này sẽ đặt lại cờ và xoá các giá trị được đặt để kiểm thử.
Trong Android 12 trở lên, để tạm thời ngăn chặn việc gắn cờ đồng bộ hoá, 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
, 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ể
được 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
Đị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 thuật toán nào
time_zone_detector
đang sử dụng. Để hiểu và tác động đến thuật toán hiện tại
trong time_zone_detector
, hãy sử dụng một trong các tuỳ 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ụngadb 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ụngadb shell cmd time_zone_detector help
.
- Để kết xuất trạng thái
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ề dòng dữ liệu
thuật toán 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 này có thể được diễn giải như sau:
Khóa | Giá trị |
---|---|
mUserConfigAllowed |
Liệu người dùng có bị ngăn chặn kiểm soát chế độ cài đặt ngày và giờ bằng cách Trình kiểm soát chính sách thiết bị. |
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 và sự hiện diện í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 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 đưa ra thông qua phần Cài đặt (thủ công) và theo thuật toán điện thoại và vị trí.