Tính năng phát hiện múi giờ theo vị trí (có trên Android 12 trở lên) 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 thiết bị sử dụng dữ liệu bản đồ vị trí và múi giờ để xác định múi giờ.
Tính năng phát hiện múi giờ theo vị trí là một cơ chế thay thế cho tính năng phát hiện múi giờ qua điện thoại. Vì tính năng này không yêu cầu điện thoại, nên tính năng này có thể được hỗ trợ trên các thiết bị có nhiều kiểu dáng, ngoài các thiết bị điện thoại di động.
Tính năng phát hiện múi giờ theo vị trí bao gồm các thành phần sau trong nền tảng AOSP:
- Logic phát hiện múi giờ trong máy chủ hệ thống
Tuỳ chọn mà người dùng có thể truy cập trong phần Cài đặt, được giới thiệu trong Android 12, để cho phép người dùng chọn giữa cơ chế phát hiện múi giờ cho điện thoại và vị trí
Hệ thống trình bổ trợ cho các thành phần thực hiện việc phát hiện vị trí và liên kết múi giờ. Trình bổ trợ này được gọi là Nhà cung cấp múi giờ vị trí (LTZP) và có thể có tối đa 2 trình bổ trợ trên một thiết bị. Nền tảng này cung cấp các API hệ thống phải được dùng để triển khai LTZP.
Cách triển khai LTZP tham chiếu.
Công cụ lưu trữ để tạo tập dữ liệu tham chiếu từ dữ liệu Mở bản đồ đường phố (OSM) có thể dùng trong quá trình triển khai tham chiếu.
Quyền riêng tư của người dùng
Tính năng phát hiện múi giờ của vị trí bao gồm những tính năng sau đây liên quan đến quyền riêng tư của người dùng:
Khi có nút bật/tắt để chọn thuật toán vị trí, người dùng có thể tắt thuật toán vị trí bất cứ lúc nào.
Các đề xuất về múi giờ bắt nguồn từ vị trí không được chia sẻ giữa các người dùng trên một thiết bị.
Người dùng có thể kiểm soát tính năng phát hiện vị trí để phát hiện múi giờ một cách rõ ràng thông qua màn hình Cài đặt Ngày và giờ. Người dùng không cần phải cấp quyền một cách rõ ràng thông qua hộp thoại cấp quyền.
Thông tin vị trí của thiết bị sẽ không được chuyển đến các dịch vụ của nền tảng Android. Thay vào đó, những hoạt động sau sẽ xảy ra:
- Các dịch vụ phát hiện múi giờ được gửi mã múi giờ bởi LTZP, chứ không phải vị trí của thiết bị. Đây là API tối thiểu cần thiết để hỗ trợ tính năng phát hiện múi giờ theo vị trí.
- Các đối tác tích hợp hệ thống kiểm soát hoạt động của từng LTZP. Các phương thức triển khai LTZP có thể sử dụng dữ liệu bản đồ múi giờ được lưu trữ hoàn toàn trên thiết bị Android, sử dụng máy chủ hoặc sử dụng phương pháp kết hợp.
Hành vi của tính năng
Dịch vụ time_zone_detector
xác định thời điểm thay đổi múi giờ hiện tại của thiết bị dựa trên các đề xuất mà dịch vụ nhận được từ thuật toán phát hiện.
Dịch vụ location_time_zone_manager
chịu trách nhiệm tạo đề xuất cho thuật toán vị trí của time_zone_detector
. Dịch vụ location_time_zone_manager
chạy trong quy trình của máy chủ hệ thống.
Dịch vụ location_time_zone_manager
không chứa bất kỳ logic phát hiện múi giờ nào. Dịch vụ này chịu trách nhiệm quản lý vòng đời của một hoặc hai trình bổ trợ LPTZ.
Khi không cần phát hiện múi giờ theo vị trí, LTZP sẽ không bắt đầu. Điều này có nghĩa là hệ thống phát hiện múi giờ theo vị trí không yêu cầu LTZP theo dõi vị trí của thiết bị, trừ phi được yêu cầu rõ ràng. Sau đây là một số lý do dẫn đến hành vi này:
- Không giống như các tín hiệu điện thoại được nhận thụ động trong quá trình hoạt động điện thoại thông thường, vị trí có thể được yêu cầu chủ động từ các nhà cung cấp vị trí Android và có thể tiêu thụ thêm năng lượng.
- Chế độ cài đặt vị trí nằm trong phạm vi người dùng và Android phải tuân thủ chế độ cài đặt hiện tại của người dùng.
- Việc thu thập thông tin vị trí của thiết bị là thông tin nhạy cảm về quyền riêng tư.
Ngoài ra, dịch vụ location_time_zone_manager
đưa ra đề xuất không chắc chắn (nếu cần) khi người dùng hiện tại thay đổi chế độ cài đặt để tránh chia sẻ thông tin vị trí giữa các người dùng.
Do những lựa chọn này, bạn sẽ phải đợi vài giây sau khi chuyển đổi thuật toán hiện tại sang vị trí hoặc sau khi chuyển đổi người dùng hiện tại, thì mới có thể phát hiện được khu vực thời gian. Điều này cũng phụ thuộc vào cách triển khai các LTZP đang được sử dụng.
Việc triển khai tính năng phát hiện múi giờ theo vị trí của AOSP cho phép tối đa 2 LTZP, một LTZP chính và một LTZP phụ như được xác định tại đây:
- LTZP chính
- Luôn chạy khi người dùng đã cho phép chạy tính năng phát hiện múi giờ theo vị trí.
- LTZP trung học
- Chạy nếu LTZP chính báo cáo rằng múi giờ không chắc chắn, báo cáo lỗi vĩnh viễn hoặc hết giờ trong quá trình khởi chạy. Dừng nếu LTZP chính gửi một đề xuất nhất định.
Như trong Hình 1, dịch vụ time_zone_detector
nhận được các đề xuất về múi giờ từ thuật toán điện thoại hoặc vị trí. Thuật toán vị trí nhận được các đề xuất từ LTZP chính hoặc phụ.
Hình 1. Luồng thông tin về phát hiện múi giờ theo vị trí.
Yêu cầu về cấu hình thiết bị
Để hỗ trợ tính năng múi giờ theo vị trí, thiết bị phải được định cấu hình bằng LTZP mà thiết bị có thể sử dụng. Thiết bị cần bật và định cấu hình ít nhất một LTZP để tính năng phát hiện múi giờ theo vị trí hoạt động và hiển thị cho người dùng trong phần Cài đặt.
Cấu hình thiết bị
Phần này mô tả cách nhà sản xuất thiết bị có thể định cấu hình thiết bị để hỗ trợ tính năng phát hiện múi giờ theo 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 | Mô tả |
---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
Đây là chế độ điều khiển chính cho tính năng phát hiện múi giờ theo vị trí.
Tính năng này được hỗ trợ theo mặc định trong AOSP. Bạn phải bật hoặc định cấu hình ít nhất một LTZP để người dùng có thể sử dụng tính năng này. Việc đặt giá trị thành false sẽ tắt hoàn toàn tính năng này để tiết kiệm một lượng nhỏ bộ nhớ. |
config_enablePrimaryLocationTimeZoneProvider |
false |
Thao tác này sẽ bật LTZP chính. |
config_primaryLocationTimeZoneProviderPackageName |
Đặt giá trị này thành tên gói của ứng dụng nơi có thể tìm thấy dịch vụ của nhà cung cấp chính. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Thao tác này sẽ bật LTZP phụ. |
config_secondaryLocationTimeZoneProviderPackageName |
Đặt giá trị này thành tên gói của ứng dụng có thể tìm thấy dịch vụ của nhà cung cấp phụ. |
Theo mặc định, cấu hình AOSP có khoá config_enableGeolocationTimeZoneDetection
được đặt thành true
, cho phép hỗ trợ tính năng phát hiện múi giờ theo vị trí. Ban đầu, người dùng sẽ không thấy tính năng này vì theo mặc định, AOSP không bao gồm cấu hình LTZP.
Tuy nhiên, khi sử dụng cấu hình mặc định này, nhà sản xuất thiết bị có thể bật và mô phỏng LTZP từ dòng lệnh để kiểm thử. (Để biết thêm thông tin, hãy xem phần Gỡ lỗi và kiểm thử.)
API trạng thái LTZP
Trong Android 14, các API LTZP hỗ trợ thông tin trạng thái báo cáo LTZP. Điều này cho phép LTZP báo cáo các vấn đề mà nền tảng có thể không tự phát hiện được, vì các thành phần phát hiện múi giờ của nền tảng không trực tiếp tham gia vào việc phát hiện vị trí hoặc múi giờ trong thuật toán vị trí.
Khả năng báo cáo rằng hành vi của LTZP đã bị suy giảm theo môi trường của thiết bị rất hữu ích khi chế độ dự phòng điện thoại được hỗ trợ. Ví dụ: nếu một LTZP bên thứ ba dựa vào các quyền hoặc chế độ cài đặt tuỳ chỉnh để tính năng phát hiện vị trí hoạt động đang chạy ở chế độ kém hiệu quả hoặc bị tắt do chế độ cài đặt thiết bị hiện tại, thì LTZP có thể báo cáo thông tin trạng thái này cho các thành phần nội bộ của nền tảng như ứng dụng Cài đặt thông qua phương thức reportSuggestion
. Sau đó, ứng dụng Cài đặt có thể thông báo cho người dùng thông qua các chuỗi có thể tuỳ chỉnh hoặc phương thức tuỳ chỉnh rằng có những chế độ cài đặt cần phải thay đổi để thuật toán vị trí hoạt động tốt hoặc hoàn toàn hoạt động.
Để biết thêm thông tin về các trạng thái mà LTZP có thể báo cáo, hãy xem TimeZoneProviderStatus
.
Cấu hình và triển khai LTZP
Khi định cấu hình LTZP, hãy đọc hướng dẫn trong mã nguồn cho frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java
.
Các nhận xét Javadoc cung cấp thông tin chi tiết về dịch vụ, quyền cần thiết và cấu hình khác.
Để định cấu hình LTZP, nhà sản xuất thiết bị phải chọn một quy trình ứng dụng để lưu trữ dịch vụ của LTZP. Việc có một quy trình chuyên biệt cho LTZP sẽ có mức hao tổn cao; lý tưởng nhất là quy trình ứng dụng được chọn là một quy trình luôn chạy, chẳng hạn như máy chủ hệ thống.
Trên các thiết bị có các thành phần hệ thống mô-đun (mô-đun), hãy cân nhắc sự tương tác giữa dữ liệu địa lý mà LTZP sử dụng và các quy tắc múi giờ (tzdb) được đưa vào mô-đun Dữ liệu múi giờ (com.android.tzdata
). Việc cập nhật một mô-đun mà không cập nhật mô-đun còn lại có thể gây ra các vấn đề về độ lệch phiên bản. Để biết thêm thông tin, hãy xem bài viết Những điều cần cân nhắc khi sử dụng tính năng.
Tài liệu tham khảo AOSP LTZP
AOSP chứa một cách triển khai LTZP tham chiếu trong packages/modules/GeoTZ
.
Phương thức triển khai tham khảo này sử dụng các API AOSP để xác định vị trí của thiết bị và sử dụng tệp dữ liệu trên thiết bị để liên kết vị trí đó với một tập hợp mã nhận dạng múi giờ.
Một tập dữ liệu tham chiếu bắt nguồn từ các dự án nguồn mở khác được đưa vào mã nguồn. Để biết thêm thông tin chi tiết, hãy xem README.md và các tệp LICENSE khác nhau.
Gỡ lỗi và kiểm tra
Phần sau đây mô tả các lệnh shell để gỡ lỗi và kiểm thử tính năng phát hiện múi giờ của vị trí.
Tương tác với dịch vụ location_time_zone_manager
Khi thuật toán vị trí được hỗ trợ trên một thiết bị chạy Android 12 trở lên, Android sẽ tạo thực thể cho dịch vụ location_time_zone_manager
tại thời điểm khởi động.
Để kết xuất trạng thái hiện tại của location_time_zone_manager
, hãy sử dụng:
adb shell cmd location_time_zone_manager dump
Để xem một bộ tuỳ chọn dòng lệnh mở rộng hỗ trợ kiểm thử, hãy sử dụng:
adb shell cmd location_time_zone_manager 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 time_zone_detector
cho mục đích kiểm thử hoặc trong quá trình phát hành chính thức. Để biết thêm thông tin, hãy xem phần Định cấu hình thiết bị bằng dịch vụ device_config.
Quá trình triển khai LTZP có thể cung cấp dịch vụ hỗ trợ gỡ lỗi hoặc kiểm thử riêng. Ví dụ: bạn có thể sử dụng lệnh sau để gỡ lỗi tham chiếu AOSP LTZP khi tham chiếu đó được đăng ký trong quy trình máy chủ hệ thống:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService