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í có trên Android 12 hoặc cao hơn. thiết bị sử dụng dữ liệu bản đồ múi giờ và vị trí của chúng nhằm xác định múi giờ.

Phát hiện múi giờ của vị trí là một cơ chế thay thế cho múi giờ điện thoại . Bởi vì điều này tính năng không yêu cầu điện thoại, tính năng này có thể được hỗ trợ trên các thiết bị nhiều kiểu dáng khác nhau bên cạnh 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.
  • Một 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ờ của đ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 phát hiện vị trí và liên kết múi giờ. Trình bổ trợ được gọi là Trình cung cấp múi giờ vị trí (LTZP) và có thể có tối đa hai mô-đun này trên một thiết bị. Nền tảng cung cấp các API hệ thống phải dùng để triển khai LTZP.

  • Hoạt động 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 Open StreetMap có thể dùng cùng với việc 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ờ lấy từ vị trí sẽ 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 thông tin 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ó để 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 điều sau sẽ xảy ra:

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

Hành vi của tính năng

Dịch vụ time_zone_detector xác định thời điểm thay đổi dòng điện của thiết bị múi giờ dựa trên đề xuất 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 các đề xuất cho thuật toán vị trí của time_zone_detector. Chiến lược phát hành đĩa đơn 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ỳ tính năng phát hiện múi giờ nào logic. chịu trách nhiệm quản lý vòng đời của một hoặc hai trình bổ trợ được gọi là Nhà cung cấp múi giờ của vị trí (LTZP).

Khi không cần phát hiện múi giờ theo vị trí, LTZP sẽ không khởi động. Chiến dịch 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ừ khi có yêu cầu rõ ràng. Một số lý do của hành vi này bao gồm:

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

Do những lựa chọn này, thường mất 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, trước khi múi giờ có thể được phát hiện. Đ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 2 LTZP, một LTZP chính và phụ như được xác định ở đây:

LTZP chính
Luôn chạy khi người dùng đã cho phép phát hiện múi giờ theo vị trí để chạy.
LTZP trung học
Chạy nếu LTZP chính báo cáo rằng múi giờ không nhất định, báo cáo lỗi vĩnh viễn hoặc hết thời gian chờ trong quá trình khởi chạy. Dừng nếu nguồn chính LTZP gửi một đề xuất nhất định.

Như trong Hình 1, các dịch vụ time_zone_detector nhận được múi giờ các đề xuất từ thuật toán điện thoại hoặc vị trí. Thuật toán vị trí nhận đề xuất từ LTZP chính hoặc phụ.

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

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í, bạn phải định cấu hình thiết bị bằng LTZP mà thiết bị có thể sử dụng. Thiết bị cần có ít nhất một LTZP để bật và được định cấu hình để 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 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ợ phát hiện múi giờ của 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_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 (Dự án nguồn mở Android). Phải có ít nhất một LTZP bật hoặc định cấu hình để tính năng này có sẵn cho người dùng.

Khi bạn đặt giá trị thành false, tính năng này sẽ bị tắt hoàn toàn đối với một bộ nhớ nhỏ đang lưu.
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 cung cấp 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 thuộc tính này thành tên gói của ứng dụng mà nhà cung cấp phụ .

Theo mặc định, cấu hình AOSP có phần tử Đã đặt khoá config_enableGeolocationTimeZoneDetection thành true, bật tính năng hỗ trợ cho tính năng phát hiện múi giờ theo vị trí. Tính năng này 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ể 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 Gỡ lỗi và kiểm thử.)

API trạng thái LTZP

Trong Android 14, các API LTZP hỗ trợ LTZP thông tin về trạng thái báo cáo. Việc 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ới tư cách là nền tảng các thành phần phát hiện múi giờ không liên quan trực tiếp đến vị trí hoặc thời gian phát hiện vùng 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 do rất hữu ích khi chế độ dự phòng điện thoại được hỗ trợ. Ví dụ: nếu một LTZP của bên thứ ba dựa vào các chế độ cài đặt tuỳ chỉnh hoặc các quyền giúp tính năng phát hiện vị trí hoạt động được đang chạy ở chế độ kém hiệu quả hoặc bị tắt theo chế độ cài đặt hiện tại của thiết bị, thiết bị có thể báo cáo trạng thái này vào các thành phần nền tảng nội bộ, chẳng hạn như ứng dụng Cài đặt thông qua 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 các tùy chỉnh có cài đặt phải thay đổi đối với vị trí một cách hiệu quả.

Để 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 trong 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 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. Có một quy trình riêng cho LTZP là 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 đang 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 của hệ thống mô-đun (mô-đun), hãy xem xét sự tương tác giữa dữ liệu địa lý mà LTZP sử dụng và quy tắc múi giờ (tzdb) được áp dụng trong Mô-đun Dữ liệu múi giờ (com.android.tzdata). Bạn có thể cập nhật một ứng dụng nhưng không cập nhật ứng dụng còn lại để gây ra vấn đề độ lệch phiên bản. Để biết thêm thông tin, hãy xem 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 LTZP cho AOSP (Dự án nguồn mở Android)

AOSP chứa triển khai LTZP tham chiếu trong packages/modules/GeoTZ. Quá trình triển khai tham chiếu này sử dụng API AOSP để xác định vị trí của thiết bị đồng thời sử dụng tệp dữ liệu trên thiết bị để ánh xạ vị trí đến một bộ mã múi giờ.

Tập dữ liệu tham chiếu bắt nguồn từ các dự án nguồn mở khác được đính kèm với mã nguồn. Để biết thêm thông tin, hãy xem README.md và nhiều tệp LICENSE.

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ờ theo 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ị đang chạy Android 12 trở lên Android 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 tập hợp đầy đủ các tuỳ chọn dòng lệnh giúp 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ể được dùng để tác động đến hành vi của time_zone_detector cho mục đích kiểm thử 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.

Quá trình triển khai LTZP cũng 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 tệp tham chiếu AOSP (Dự án nguồn mở Android) LTZP khi được đăng ký trong quá trình máy chủ hệ thống.

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService