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, 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 dữ liệu bản đồ vị trí và múi giờ để xác định múi giờ.

Phát hiện múi giờ vị trí là một cơ chế thay thế cho việc phát hiện múi giờ trên đ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 khác nhau ngoài thiết bị điện thoại di động.

Tính năng phát hiện múi giờ 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.
  • Một tùy chọn mà người dùng có thể truy cập trong 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ờ qua điện thoại và vị trí.

  • Một hệ thống plug-in dành cho các thành phần thực hiện việc phát hiện vị trí và ánh xạ múi giờ. Một trình cắm được gọi là Nhà cung cấp múi giờ vị trí (LTZP) và có thể có tối đa hai trình cắm 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 sử dụng để triển khai LTZP.

  • Việc triển khai LTZP tham khảo.

  • Công cụ máy chủ để tạo tập dữ liệu tham chiếu từ dữ liệu OpenStreetMap có thể được sử dụng khi triển khai tham chiếu.

Quyền riêng tư của người dùng

Phát hiện múi giờ vị trí bao gồm các tính năng bảo mật người dùng sau:

  • Khi có nút chuyển đổi để 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.

  • Đề xuất múi giờ dựa trên vị trí không được chia sẻ giữa những người dùng trên thiết bị.

  • Người dùng có thể kiểm soát việc 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 rõ ràng thông qua hộp thoại cấp phép.

  • Thông tin vị trí thiết bị không được chuyển tới các dịch vụ nền tảng Android. Thay vào đó, điều sau đây xảy ra:

    • Các dịch vụ phát hiện múi giờ chỉ được gửi ID 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ợ phát hiện múi giờ vị trí.
    • Hoạt động của các LTZP riêng lẻ được giao cho các nhà tích hợp hệ thống quyết định. Việc triển khai LTZP có thể sử dụng dữ liệu bản đồ múi giờ được lưu giữ hoàn toàn trên thiết bị Android, tận dụng máy chủ hoặc sử dụng phương pháp kết hợp.

Hành vi 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à thiết bị 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 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. Nó chịu trách nhiệm quản lý vòng đời của một hoặc hai plugin được gọi là Nhà cung cấp múi giờ vị trí (LTZP).

Khi không cần phát hiện múi giờ vị trí, LTZP sẽ không khởi động. Điều này có nghĩa là hệ thống phát hiện múi giờ vị trí không yêu cầu LTZP theo dõi vị trí của thiết bị trừ khi họ được yêu cầu rõ ràng. Một số lý do cho hành vi này bao gồm:

  • Không giống như các tín hiệu điện thoại được nhận một cách thụ động như một phần của hoạt động điện thoại thông thường, vị trí có thể được chủ động yêu cầu từ các nhà cung cấp vị trí Android và có thể tiêu thụ thêm năng lượng.
  • Cài đặt vị trí nằm trong phạm vi người dùng và Android phải tôn trọng cài đặt của người dùng hiện tại.
  • Việc lấy vị trí của thiết bị là vấn đề 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 để tránh chia sẻ thông tin vị trí giữa những người dùng.

Do những lựa chọn này, thường phải mất vài giây sau khi chuyển 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 trước khi có thể phát hiện được múi giờ. Điều này cũng phụ thuộc vào việc triển khai LTZP đang được sử dụng.

Việc triển khai phát hiện múi giờ vị trí AOSP cho phép tối đa hai LTZP, một LTZP chính và một LTZP phụ như được xác định ở đây:

LTZP sơ cấp
Luôn chạy khi người dùng cho phép tính năng phát hiện múi giờ vị trí chạy.
LTZP thứ cấp
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 thời gian trong quá trình khởi tạo. Dừng nếu LTZP chính gửi một đề xuất nhất định .

Như được hiển thị trong Hình 1, các dịch vụ time_zone_detector nhận được đề xuất 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 đề xuất từ ​​LTZP chính hoặc phụ.

Luồng thông tin phát hiện múi giờ vị trí

Hình 1. Luồng thông tin phát hiện múi giờ vị trí.

Yêu cầu cấu hình thiết bị

Để hỗ trợ tính năng múi giờ 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. Các thiết bị yêu cầu phải 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ờ của vị trí hoạt động và hiển thị cho người dùng trong 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ợ phá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_enableGeolocationTimeZoneDetection true Đây là điều khiển chính cho tính năng phát hiện múi giờ vị trí.

Tính năng này được hỗ trợ theo mặc định trong AOSP. Ít nhất một LTZP phải được bật hoặc định cấu hình để tính năng này khả dụng với người dùng.

Đặt giá trị thành false sẽ tắt hoàn toàn tính năng này để tiết kiệm bộ nhớ nhỏ.
config_enablePrimaryLocationTimeZoneProvider false Điều này cho phép LTZP chính.
config_primaryLocationTimeZoneProviderPackageName Đặt tên 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 Điều này cho phép LTZP thứ cấp.
config_secondaryLocationTimeZoneProviderPackageName Đặt tên 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 thứ cấp.

Theo mặc định, cấu hình AOSP có khóa config_enableGeolocationTimeZoneDetection được đặt thành true , cho phép hỗ trợ tính năng phát hiện múi giờ vị trí. Tính năng này ban đầu không hiển thị với người dùng vì AOSP không bao gồm cấu hình LTZP theo mặc định. Tuy nhiên, bằng cách sử dụng cấu hình mặc định này, nhà sản xuất thiết bị có thể kích hoạt và mô phỏng LTZP từ dòng lệnh để thử nghiệm. (Để biết thêm thông tin, hãy xem Gỡ lỗi và kiểm tra .)

API trạng thái LTZP

Trong Android 14, 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 liên quan trực tiếp đến 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 hoạt động của LTZP đã bị suy giảm do 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 LTZP của bên thứ ba dựa vào cài đặt tùy chỉnh hoặc quyền để phát hiện vị trí của nó hoạt động đang chạy ở chế độ xuống cấp hoặc bị tắt bởi cài đặt thiết bị hiện tại, nó có thể báo cáo thông tin trạng thái này cho các thành phần nền tảng nội bộ 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ể tùy chỉnh hoặc tùy chỉnh rằng có những cài đặt phải thay đổi để thuật toán vị trí hoạt động tốt hoặc hoàn toàn không 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 .

Vị trí Cấu hình và triển khai Nhà cung cấp Múi giờ

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 . Nhận xét Javadoc cung cấp thông tin chi tiết về dịch vụ, các quyền cần thiết và cấu hình khác.

Để định cấu hình Nhà cung cấp múi giờ vị trí, nhà sản xuất thiết bị phải chọn quy trình ứng dụng để lưu trữ dịch vụ của LTZP. Việc có một quy trình dành riêng cho LTZP là một chi phí cao; lý tưởng nhất là quy trình ứng dụng được chọn là quy trình luôn chạy 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 xem xét sự tương tác giữa dữ liệu địa lý được LTZP sử dụng và các quy tắc múi giờ (tzdb) có trong mô-đun Dữ liệu múi giờ ( com.android.tzdata ). Các bản cập nhật cho một cái mà không có bản cập nhật cho cái kia có thể gây ra sự cố sai lệch phiên bản. Để biết thêm thông tin, hãy xem Những cân nhắc khi áp dụng tính năng .

Tham chiếu AOSP LTZP

AOSP chứa triển khai LTZP tham chiếu trong packages/modules/GeoTZ . Việc triển khai tham chiếu này sử dụng 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ị để ánh xạ vị trí tới một tập hợp ID 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 bao gồm trong mã nguồn. Để biết thêm 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 tra tính năng phát hiện múi giờ 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 thiết bị chạy Android 12 trở lên, Android sẽ khởi tạo dịch vụ location_time_zone_manager khi 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 loạt các tùy chọn dòng lệnh nhằm hỗ trợ kiểm tra, hãy sử dụng:

adb shell cmd location_time_zone_manager 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_zone_detector để thử nghiệm hoặc trong sản xuất. Để biết thêm thông tin, hãy xem Định cấu hình thiết bị bằng dịch vụ device_config .

Việc triển khai LTZP cũng có thể cung cấp hỗ trợ kiểm tra hoặc gỡ lỗi của riêng chúng. Ví dụ: bạn có thể sử dụng lệnh sau để gỡ lỗi LTZP tham chiếu AOSP khi nó đượ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