Nhận 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 nên chỉ yêu cầu quyền truy cập thông tin vị trí gần chính xác. Các ứng dụng cần vị trí gần chính xác thường dùng vị trí mạng (FLP) vì vị trí này nhanh và tiêu thụ ít điện năng hơn.

So với thiết bị di động chạy Android, vị trí mạng trong ứng dụng dành cho ô tô có thể khó xác định hơn. Bạn có thể dùng 2 API Android:

  • API LocationManager hoặc LM yêu cầu bạn 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 vị trí bằng cách giới thiệu Trình cung cấp vị trí kết hợp (FLP).

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

Thay vào đó, bạn có thể chọn yêu cầu và dùng NETWORK_PROVIDER một cách rõ ràng trong LM, cũng như GPS_PROVIDER cho các vị trí chính xác, dùng quyền android.permission.ACCESS_FINE_LOCATION Trong API 31, FUSED_PROVIDER, trước đây chỉ có thể truy cập thông qua API GPS, hiện có dưới dạng nhà cung cấp vị trí cho LM. Bạn có thể xem cách triển khai FLP đơn giản hơn trong FusedLocationProvider.java.

Mặc dù bạn chỉ có thể dùng GPS_PROVIDER với quyền truy cập thông tin vị trí gần chính xác, nhưng khung này sẽ giảm độ chính xác một cách nhân tạo để phù hợp với kỳ vọng. Điều này không có nhiều ý nghĩa đối với các nhà phát triển nhắm đến điện thoại Android vì khả năng sử dụng tổng thể kém và thường mất nhiều thời gian hơn để xác định vị trí gần chính xác.

Vị trí mạng trong ô tô

NETWORK_PROVIDER dùng trên điện thoại Android (có Các dịch vụ của Google dành cho thiết bị di động) đã thay đổi từ việc chỉ xác định vị trí dựa trên các trạm phát sóng ở gần thành việc cũng dùng các điểm truy cập Wi-Fi hoặc thậm chí là các đèn hiệu Bluetooth (BT). Việc sử dụng NETWORK_PROVIDER có thể yêu cầu kết nối dữ liệu.

Đối với các ứng dụng dành cho ô tô, các hạn chế về thiết bị sẽ khác nhau. Vì GNSS thường bật, nên bạn sẽ không bị phạt do tăng mức sử dụng điện năng và pin. 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 mình.

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

Không giống như thiết bị di động, xe hiếm khi nhảy từ nơi này sang nơi khác. Vị trí của xe thường được xác định.

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

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ã ô (và cường độ tín hiệu). Do đó và vì chúng tôi giảm thiểu mức sử dụng dữ liệu, nên không có thêm cách triển khai chức năng nào của NLP.

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

Ngoài việc sử dụng thông minh các nhà cung cấp mạng và GPS khi thích hợp, FLP dành cho thiết bị di động còn kết hợp 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 vị trí. Mặt khác, cách triển khai FLP hiện tại của Automotive tận dụng các giả định nêu trên và luôn dùng GPS_PROVIDER làm nguồn cơ bản. FLP điều chỉnh vị trí từ GNSS, thêm một số lỗi để vị trí kém chính xác hơn khi cần. Ví dụ: khi vị trí gần chính xác được cung cấp cho một ứng dụng.

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

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

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

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ị trên nhiều ngành dọc và do đó, đảm bảo khả năng sử dụng ứng dụng tối đa mà không cần mã khác biệt để xác định vị trí khi cần.