Vị trí tương đối trên Android Automotive OS

Để 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í tương đối. Những ứng dụng cần vị trí ước chừng thường sử dụng vị trí mạng kết hợp (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 các ứng dụng ô tô có thể khó xác định 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 trình cung cấp vị trí ưu tiên.

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

Nhiều ứng dụng ô tô sử dụng FLP từ API Dịch vụ Google Play thay vì LocationManager. FLP chọn nhà cung cấp dịch vụ 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í (nguồn điện và độ chính xác) mà xe cần.

Thay vào đó, bạn có thể chọn yêu cầu và sử dụng rõ ràng NETWORK_PROVIDER cũng như GPS_PROVIDER cho vị trí chính xác, sử dụng các 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) hiện có sẵn dưới dạng một 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ù bạn chỉ có thể sử dụng GPS_PROVIDER với quyền truy cập vị trí tương đối – khung này sẽ 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ô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 cung cấp tổng thể kém và thường mất nhiều thời gian hơn để có được vị trí tương đối.

Vị trí mạng trong ô tô

NETWORK_PROVIDER được dùng trên điện thoại Android (có Dịch vụ di động của Google) 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à các tín hiệu Bluetooth (BT) ở gần. Do đó, NETWORK_PROVIDER có thể cần kết nối dữ liệu.

Đối với các ứng dụng ô tô, các hạn chế về thiết bị sẽ khác nhau. Vì hệ thống vệ tinh dẫn đường toàn cầu (GNSS) thường bật, nên bạn sẽ không bị phạt do mức tiêu thụ điện và pin tăng lên. 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 được trao đổi với các máy chủ của mình.

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

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 trong quá trình hoạt động.

Nhà cung cấp dịch vụ 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 ô (và cường độ tín hiệu). Do đó và vì chúng tôi giảm thiểu việc sử dụng dữ liệu, nên không có thêm hoạt động 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 một cách thông minh các nhà cung cấp mạng và GPS khi thích hợp, FLP trên 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, 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. Ứng dụng này giả mạo vị trí từ GNSS, thêm một số lỗi để vị trí trở nên không chính xác hơn khi cần. Ví dụ: khi vị trí tương đối được cung cấp cho một ứng dụng.

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

Thiết kế ứng dụng để nhắm đến người dùng thiết bị di động và ô tô

Đối với những ứng dụng nhắm đến thiết bị di động thiết bị trên ô tô không yêu cầu độ chính xác cao hơn, hãy chỉ yêu cầu android.permission.ACCESS_COARSE_LOCATION và quay lại sử dụng FLP khi có. 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 yêu cầu 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 giúp đạt được khả năng tương thích cao hơn với các thiết bị trên nhiều hệ số hình dạng và do đó, khả năng cung cấp ứng dụng tối đa mà không có sự khác biệt về mã để lấy vị trí khi cần.