Để 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. 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 đ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 hoặc LM yêu cầu bạn xác định rõ trình cung cấp vị trí ưu tiên.
API Dịch vụ Google Play cung cấp một cách thức đơn giản hơn để bạn làm việc với vị trí thông qua việc 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ô sử dụng FLP từ API Dịch vụ Google Play (GPS) thay vì LM. 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
trong LM, cũng như GPS_PROVIDER
cho 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 GPS API) hiện có sẵn dưới dạng một trình cung cấp vị trí cho LM. Bạn có thể xem một cách triển khai đơn giản hơn của 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ô, nhưng 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. Đ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í thô.
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) đã thay đổi từ việc xác định vị trí chỉ dựa trên các trạm phát só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à các thiết bị Bluetooth (BT) beacon. Để sử dụng NETWORK_PROVIDER
, bạn có thể cần có 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ì GNSS thường ở trạng thái bật, nên không có hình phạt nào 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ì 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 về yêu cầu vị trí (cụ thể là nguồn 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 trong quá trình hoạt động.
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ã 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ụ: vào 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 chiếc xe đó được sử dụng hoặc sau khi xe bị kéo.
Thiết kế ứng dụng để nhắm đến người dùng 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ính xác cao hơn của yêu cầu android.permission.ACCESS_COARSE_LOCATION
chỉ và quay lại sử dụng FLP khi có sẵn. Ngoài ra, bạn có thể 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 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.network
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 nhiều ngành dọ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ã để lấy vị trí khi cần.