Lấy thông tin vị trí tương đối

Để tôn trọng quyền riêng tư của người dùng, nhà phát triển ứng dụng chỉ nên yêu cầu các quyền truy cập thông tin vị trí tương đối. Các ứng dụng cần vị trí thô gần đúng thường sử dụng vị trí mạng kết hợp (FLP) vì tốc độ này nhanh và tiêu thụ ít pin hơn. So với các thiết bị di động chạy Android, việc xác định vị trí mạng trong các ứng dụng trên ô tô có thể khó khăn hơn. Bạn có thể sử dụng 2 API Android:

  • API LocationManager yêu cầu bạn sử dụng requestLocationUpdates để xác định rõ ràng nhà cung cấp vị trí ưu tiên.

  • API Dịch vụ Google Play cung cấp một cách đơn giản hơn để bạn làm việc với thông tin vị trí trong FusedLocationProviderClient.

Nhiều ứng dụng dành cho ô tô sử dụng FLP qua API Dịch vụ Google Play thay vì LocationManager. FLP chọn trình cung cấp vị trí tối ưu dựa trên các chính sách và tiêu chí yêu cầu về thông tin vị trí (công suất và độ chính xác) mà xe cần.

Thay vào đó, bạn có thể chọn yêu cầu rõ ràng và sử dụng NETWORK_PROVIDER cũng như GPS_PROVIDER cho các vị trí chính xác sử dụng quyền android.permission.ACCESS_FINE_LOCATION. Trên Android 12 (API cấp 31) trở lên, FUSED_PROVIDER, trước đây chỉ có thể truy cập thông qua API Dịch vụ Google Play, được cung cấp dưới dạng trình cung cấp vị trí cho LocationManager. Bạn có thể xem cách triển khai FLP trong FusedLocationProvider.java.

Mặc dù chỉ có thể sử dụng GPS_PROVIDER với các quyền tương đối – khung này làm giảm độ chính xác một cách giả tạo để phù hợp với kỳ vọng – nhưng điều này khá khó hiểu đối với các nhà phát triển nhắm đến điện thoại Android vì khả năng đáp ứng tổng thể kém và thường chậm hơn để có được vị trí tương đối.

Vị trí mạng trong ô tô

NETWORK_PROVIDER dùng trên điện thoại Android (có Dịch vụ của Google dành cho thiết bị di động) sẽ xác định vị trí dựa trên các trạm phát sóng di động, điểm truy cập Wi-Fi và beacon Bluetooth (BT) ở gần. Do đó, NETWORK_PROVIDER có thể yêu cầu kết nối dữ liệu.

Đối với ứng dụng dành cho ô tô, các điều kiện ràng buộc đối với thiết bị sẽ khác nhau. Vì hệ thống vệ tinh điều hướng toàn cầu (GNSS) của G Suite thường bật nên sẽ không gây ra hình phạt nào do mức sử dụng pin và điện năng tăng. Do đó, thời gian hoạt động của IVI không bị ảnh hưởng. Chúng tôi cố gắng giảm thiểu dữ liệu trao đổi với máy chủ của chúng tôi.

Do đó, rất nhiều ứng dụng sử dụng FLP từ API Play thay vì LocationManager trực tiếp vì FLP tự động thực hiện điều thông minh bằng cách sử dụng trình cung cấp vị trí có thể đáp ứng tốt nhất các tiêu chí/chính sách yêu cầu vị trí (cụ thể là sức mạnh và độ chính xác).

Không giống như thiết bị di động, phương tiện hiếm khi chuyển từ nơi này sang nơi khác. Hầu như lúc nào vị trí của xe cũng được xác định dưới mui.

Nhà cung cấp vị trí mạng (NLP)

Hầu hết các xe đều không triển khai các API điện thoại bắt buộc để lấy thông tin cần thiết về Mã nhận dạng điện thoại di động (và độ mạnh của tín hiệu). Do đó, vì chúng tôi giảm thiểu mức sử dụng dữ liệu nên chúng tôi không cung cấp thêm chức năng triển khai chức năng nào của NLP.

Trình cung cấp vị trí kết hợp

FLP dành cho thiết bị di động, ngoài việc sử dụng các nhà cung cấp mạng và GPS một cách thông minh khi thích hợp, còn hợp nhất thông tin từ các cảm biến khác để nâng cao hơn nữa chất lượng của thông tin vị trí. Mặt khác, việc triển khai FLP của Automotive hiện tại tận dụng các giả định nêu trên và luôn sử dụng GPS_PROVIDER làm nguồn cơ bản. Công cụ này làm mờ các vị trí của GNSS, thêm một số lỗi khiến độ chính xác không chính xác hơn khi cần thiết. Ví dụ: khi vị trí thô được cung cấp cho ứng dụng.

Do đó, trong một số ít trường hợp, thời gian hiển thị vị trí đầu tiên có thể lâu hơn bình thường. Ví dụ: lần đầu tiên một chiếc xe hoặc chính xác hơn là hệ thống phụ về vị trí của xe được sử dụng hoặc sau khi được kéo xe.

Thiết kế ứng dụng để nhắm đến việc sử dụng trên thiết bị di động và trên ô tô

Đối với ứng dụng nhắm đến thiết bị di động ô tô không yêu cầu chất lượng độ chính xác cao hơn, hãy yêu cầu android.permission.ACCESS_COARSE_LOCATION chỉ và quay lại sử dụng FLP khi có thể. Ngoài ra, hãy sử dụng trực tiếp GPS_PROVIDER với cùng các quyền. Khung này làm giảm độ chính xác của vị trí GNSS cơ bản để phù hợp với các kỳ vọng của API. Để tìm hiểu thêm, hãy xem phần Độ chính xác trong bài viết Yêu cầu quyền truy cập thông tin vị trí.

Ngoài ra, các ứng dụng này phải khai báo rõ ràng tính năng android.hardware.location.networkkhông bắt buộc trong tệp kê khai. Ví dụ:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

Phương pháp này đảm bảo khả năng tương thích tối đa với các thiết bị ở nhiều ngành dọc, nhờ đó đảm bảo khả năng hoạt động tối đa của ứng dụng mà không có sự khác biệt về mã để nhận vị trí khi cần.