Để 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 quyền truy cập thông tin vị trí không chính xác. Các ứng dụng cần thông tin vị trí không chính xác 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 ứ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 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í 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 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à sử dụng rõ rà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ó sẵn dưới dạng 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 thông tin vị trí không chính xác (khung sẽ giảm độ chính xác một cách nhân tạo để phù hợp với kỳ vọng), nhưng điều này không có ý nghĩa nhiều đố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 thông tin vị trí tổng thể kém và thường chậm hơn để có được thông tin vị trí không chính xác.
Vị trí mạng trong ô tô
NETWORK_PROVIDER được sử dụng trên điện thoại Android (có Dịch vụ di động của Google) xác định vị trí dựa trên các tháp di động, điểm truy cập Wi-Fi và đèn hiệu Bluetooth (BT) ở gần. Do đó, NETWORK_PROVIDER có thể yêu cầu 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 tăng mức sử dụng điện năng và pin. Do đó, thời gian hoạt động của hệ thống thông tin giải trí trên xe (IVI) sẽ 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.
Nhiều ứng dụng sử dụng FLP từ API Play thay vì LocationManager trực tiếp vì FLP tự động chọn nhà cung cấp vị trí tốt nhất để đáp ứng các tiêu chí hoặc chính sách của yêu cầu, chẳng hạn như đ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 (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 để nhận 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 chúng tôi không cung cấp thêm cách triển khai chức năng NLP.
Trình cung cấp vị trí kết hợp
FLP di động 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í, ngoài việc sử dụng nhà cung cấp mạng và GPS. Ngược lại, FLP ô tô sử dụng GPS_PROVIDER làm nguồn cơ bản. Hệ thống này điều chỉnh vị trí GNSS, thêm lỗi có chủ ý để giảm độ chính xác khi một ứng dụng khách yêu cầu thông tin vị trí không chính xác.
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 để có được thông tin 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 được kéo.
Thiết kế ứng dụng để nhắm đến việc sử dụng trên thiết bị di động và ô tô
Đối với các ứng dụng nhắm đến thiết bị di động và ô tô không
yêu cầu độ 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ó. Ngoài ra, hãy sử dụng GPS_PROVIDER trực tiếp với các quyền tương tự. Khung 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 phần Độ chính xác
trong 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.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 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 thức 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ã để nhận thông tin vị trí khi cần.