Lấy 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 được khuyến khích chỉ yêu cầu quyền truy cập vị trí chung. Các ứng dụng cần vị trí thô gần đúng thường sử dụng vị trí mạng (FLP) vì nó nhanh và tiêu thụ ít năng lượng hơn.

So với các thiết bị di động dựa trên 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 nhà cung cấp vị trí ưa thích.

  • API dịch vụ của Google Play cung cấp một cách đơn giản hơn để bạn làm việc với vị trí với việc giới thiệu Nhà cung cấp vị trí hợp nhất (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í (sức mạnh và độ chính xác) mà phương tiện cần.

Thay vào đó, bạn có thể chọn yêu cầu và sử 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 sử dụng quyền android.permission.ACCESS_FINE_LOCATION . Trong API 31, FUSED_PROVIDER , trước đây chỉ có thể truy cập được thông qua API GPS, hiện có sẵn 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ù chỉ có thể sử dụng GPS_PROVIDER với các quyền cấp phép thô, nhưng khung làm 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ó ý nghĩa gì đối với các nhà phát triển nhắm mục tiêu vào điện thoại Android vì tính khả dụng tổng thể kém và thường chậm hơn để có được vị trí thô.

Vị trí mạng trong ô tô

NETWORK_PROVIDER được sử dụng trên điện thoại Android (với Google Mobile Services) đã thay đổi từ việc xác định vị trí chỉ dựa trên các tháp di động gần đó sang sử dụng cả điểm truy cập Wi-Fi hoặc thậm chí 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 ô tô, các ràng buộc về thiết bị sẽ khác nhau. Vì GNSS thường được bật nên không bị phạt do sử dụng nhiều năng lượng và pin hơn. Kết quả là 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 đó, rất 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 điều thông minh bằng cách sử dụng nhà cung cấp vị trí có khả năng tốt nhất để đáp ứng các tiêu chí/chính sách yêu cầu vị trí (cụ thể là sức mạnh và độ chính xác).

Không giống như các thiết bị di động, các phương tiện di chuyển hiếm khi nhảy từ nơi này sang nơi khác. Vị trí xe luôn được biết dưới mui xe.

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

Hầu hết các phương tiện không triển khai API điện thoại bắt buộc để nhận thông tin cần thiết về Cell ID (và cường độ tín hiệu). Kết quả là và vì chúng tôi giảm thiểu việc sử dụng dữ liệu nên không cung cấp chức năng triển khai NLP bổ sung nào.

Nhà cung cấp vị trí hợp nhất

FLP di động, 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, 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 các vị trí. Mặt khác, việc triển khai FLP của Ô tô hiện tại tận dụng các giả định đã nói ở trên và luôn sử dụng GPS_PROVIDER làm nguồn cơ bản. Nó làm sai lệch các vị trí từ GNSS, thêm một số lỗi để tăng độ chính xác khi cần thiết. Ví dụ: khi các vị trí thô được cung cấp cho khách hàng.

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

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

Chúng tôi khuyên các ứng dụng nhắm mục tiêu đến thiết bị di động ô tô không yêu cầu chất lượng chính xác cao hơn chỉ yêu cầu android.permission.ACCESS_COARSE_LOCATION và quay lại sử dụng FLP khi có sẵn. Ngoài ra, cách cuối cùng là sử dụng GPS_PROVIDER trực tiếp với cùng quyền. Khung làm giảm độ chính xác của vị trí GNSS cơ bản để phù hợp với mong đợi của API. Để tìm hiểu thêm, hãy xem Độ 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 tùy chọn trong tệp kê khai của chúng. Ví dụ:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

Cách tiếp cận 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 đó, tính khả dụng của ứng dụng tối đa mà không có sự khác biệt về mã để nhận được vị trí khi cần.