Để 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í ở mức độ tương đối. Các ứng dụng cần vị trí ước chừng thường sử dụng vị trí mạng (FLP) vì vị trí này nhanh và tiêu thụ ít năng lượng hơn.
So với các thiết bị di động chạy Android, vị trí mạng trong ứng dụng ô tô có thể khó khăn hơn. Bạn có thể sử dụng hai API Android:
API LocationManager yêu cầu bạn 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 một cách đơn giản hơn để bạn làm việc với thông tin vị trí thông qua việc ra mắt Trình cung cấp vị trí kết hợp (FLP).
Nhiều ứng dụng ô tô sử 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 yêu cầu vị trí (mức tiêu thụ đ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à sử dụng rõ ràng NETWORK_PROVIDER
trong LM, cũng như GPS_PROVIDER
cho các vị trí chính xác, sử dụng các 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ó sẵn dưới dạng trì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ù có thể sử dụng GPS_PROVIDER
chỉ với các quyền truy cập thô, nhưng 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, điều này không có ý nghĩa gì đố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 chậm hơn để lấy vị trí thô.
Vị trí mạng trong ngành ô tô
NETWORK_PROVIDER
dùng trên điện thoại Android (có Dịch vụ 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 di động ở gần sang việc cũng sử dụng các điểm truy cập Wi-Fi hoặc thậm chí là beacon Bluetooth (BT). Có thể bạn cần có kết nối dữ liệu để sử dụng NETWORK_PROVIDER
.
Đối với ứng dụng ô tô, các quy tắc ràng buộc về thiết bị sẽ khác. Vì GNSS thường bật, nên bạn sẽ không bị phạt do mức sử dụng pin và điện năng 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 máy chủ.
Do đó, nhiều ứng dụng sử dụng FLP từ API Play thay vì LM trực tiếp vì FLP tự động thực hiện việc thông minh bằng cách sử dụng trì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 yêu cầu vị trí (cụ thể là quyền và độ chính xác) trong nền.
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 biết trong khoang máy.
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ùng phủ sóng (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ó phương thức triển khai chức năng bổ sung nào của NLP được cung cấp.
Trình cung cấp vị trí kết hợp
FLP trên 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 kết hợp thông tin từ các cảm biến khác để nâng cao chất lượng vị trí. Mặt khác, cách triển khai hiện tại của FLP của Automotive 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. Phương thức này làm sai lệch vị trí từ GNSS, thêm một số lỗi để không chính xác hơn khi cần. Ví dụ: khi vị trí thô được cung cấp cho ứ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 để có sẵn. Ví dụ: lần đầu tiên một xe hoặc nói chính xác hơn là hệ thống con vị trí của xe được sử dụng hoặc sau khi được kéo.
Thiết kế ứng dụng để nhắm đến mục đích sử dụng trên thiết bị di động và ô tô
Các ứng dụng nhắm đến thiết bị di động và thiết bị ô tô không yêu cầu chất lượng cao hơn về yêu cầu chính xác android.permission.ACCESS_COARSE_LOCATION
chỉ nên sử dụng FLP khi có. Ngoài ra, như một phương án cuối cùng, 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 kỳ vọng của API. Để tìm hiểu thêm, hãy xem phần Độ 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.network
là khô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 các ngành dọc, do đó, ứng dụng có thể hoạt động tối đa mà không có sự khác biệt về mã để lấy vị trí khi cần.