Obtener ubicación aproximada

Para respetar la privacidad del usuario, se recomienda a los desarrolladores de apps que solo soliciten permisos de ubicación aproximados. Las apps que necesitan una posición aproximada aproximada suelen usar la ubicación de red combinada (FLP), ya que es rápida y consume menos energía. En comparación con los dispositivos móviles basados en Android, la ubicación de red en las apps para automóviles puede ser más desafiante. Puedes usar dos APIs de Android:

  • La API de LocationManager requiere que uses requestLocationUpdates para identificar explícitamente el proveedor de ubicación preferido.

  • La API de los Servicios de Google Play ofrece una forma más directa de trabajar con la ubicación en FusedLocationProviderClient.

Muchas apps para automóviles usan el FLP de la API de los Servicios de Google Play en lugar de LocationManager. El FLP selecciona el proveedor de ubicación óptimo según los criterios y las políticas de solicitud de ubicación (energía y precisión) que necesita el vehículo.

En su lugar, puedes solicitar y usar explícitamente NETWORK_PROVIDER, así como GPS_PROVIDER para posiciones precisas, que usa permisos android.permission.ACCESS_FINE_LOCATION. En Android 12 (nivel de API 31) y versiones posteriores, FUSED_PROVIDER, al que se podía acceder antes solo a través de la API de Servicios de Google Play, está disponible como proveedor de ubicación de LocationManager. Puedes ver una implementación de FLP en FusedLocationProvider.java.

Si bien es posible usar GPS_PROVIDER solo con derechos de permiso generales (el framework degrada artificialmente la exactitud para alinearse con las expectativas), no tiene mucho sentido para los desarrolladores que se orientan a teléfonos Android, ya que la disponibilidad general es deficiente y, a menudo, más lenta para obtener una posición aproximada.

Ubicación de la red en la industria automotriz

El objeto NETWORK_PROVIDER que se usa en los teléfonos Android (con los Servicios de Google para dispositivos móviles) determina la ubicación en función de las torres de telefonía celular, los puntos de acceso Wi-Fi y balizas Bluetooth (BT) cercanos. Como resultado, NETWORK_PROVIDER puede requerir una conexión de datos.

En el caso de las apps para automóviles, las restricciones de los dispositivos son diferentes. Como el sistema de navegación satelital global (GNSS) por lo general está activado, no se incurren penalizaciones debido al aumento en el consumo de batería y en la batería. Como resultado, el tiempo de actividad de IVI no se ve comprometido. Nos esforzamos por minimizar los datos que se intercambian con nuestros servidores.

Por lo tanto, muchas apps usan FLP de la API de Play en lugar de LocationManager directamente, ya que el FLP realiza la opción inteligente automáticamente usando el proveedor de ubicación que es más capaz de satisfacer las políticas o los criterios de la solicitud de ubicación (es decir, potencia y precisión).

A diferencia de los dispositivos móviles, los vehículos rara vez parecen saltar de un lugar a otro. La posición del vehículo se conoce en profundidad la mayor parte del tiempo.

Proveedor de ubicación de red (PLN)

La mayoría de los vehículos no implementan las APIs de telefonía requeridas para obtener la información necesaria sobre un ID de celular (y la intensidad de la señal). Como resultado y, dado que minimizamos el uso de datos, no se proporciona ninguna implementación funcional adicional del PLN.

Proveedor de ubicación combinada

El FLP móvil, además de usar de forma inteligente los proveedores de red y GPS, según corresponda, fusiona la información de otros sensores para mejorar aún más la calidad de las ubicaciones. Por otro lado, la implementación actual del FLP de Automotive aprovecha las suposiciones mencionadas anteriormente y usa GPS_PROVIDER como fuente subyacente todo el tiempo. Se ocultan las posiciones de GNSS y se agregan algunos errores para que sean más inexactos cuando sea necesario. Por ejemplo, cuando se proporcionan ubicaciones aproximadas a un cliente.

Por lo tanto, en muy pocos casos, puede haber un tiempo más largo de lo habitual para que la primera posición esté disponible. Por ejemplo, la primera vez que se usa un vehículo o, para ser más precisos, su subsistema de ubicación o después de ser remolcado.

Diseña apps orientadas a los usos móviles y de la industria automotriz

En el caso de las apps que se segmentan para dispositivos móviles y de la industria automotriz que no requieren una calidad de precisión más alta, solicita android.permission.ACCESS_COARSE_LOCATION solo y vuelve a usar FLP cuando esté disponible. También puedes usar GPS_PROVIDER directamente con los mismos permisos. El framework degrada la precisión de la posición subyacente de GNSS para alinearse con las expectativas de la API. Para obtener más información, consulta Precisión en Cómo solicitar permisos de ubicación.

Además, estas apps deben declarar explícitamente la función android.hardware.location.network como opcional en su manifiesto. Por ejemplo:

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

Este enfoque garantiza la máxima compatibilidad con dispositivos en todas las verticales y, por lo tanto, la disponibilidad máxima de la app sin diferencias de código para obtener posiciones cuando sea necesario.