Para respetar la privacidad del usuario, se recomienda a los desarrolladores de apps que solo soliciten permisos de ubicación aproximada. Las apps que necesitan una posición aproximada suelen usar la ubicación de red combinada (FLP) porque 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 difícil de determinar. Puedes usar dos APIs de Android:
La API de LocationManager requiere que uses
requestLocationUpdatespara identificar de forma explícita el proveedor de ubicación preferido.La API de Servicios de Google Play te ofrece una forma más sencilla 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 la solicitud de ubicación (potencia y precisión) que necesita el vehículo.
En su lugar, puedes solicitar y usar NETWORK_PROVIDER de forma explícita, así como GPS_PROVIDER para obtener ubicaciones precisas, que usa permisos de android.permission.ACCESS_FINE_LOCATION. En Android 12 (nivel de API 31) y versiones posteriores, FUSED_PROVIDER, al que antes solo se podía acceder a través de la API de los Servicios de Google Play, está disponible como proveedor de ubicación para LocationManager. Puedes ver una implementación del FLP en FusedLocationProvider.java.
Si bien es posible usar GPS_PROVIDER solo con derechos de permiso aproximados (el framework degrada artificialmente la precisión para alinearse con las expectativas), no tiene mucho sentido para los desarrolladores que segmentan sus aplicaciones para teléfonos Android, ya que la disponibilidad general es baja y, a menudo, es más lento obtener una posición aproximada.
Ubicación de la red en la industria automotriz
El NETWORK_PROVIDER que se usa en teléfonos Android (con los Servicios móviles de Google) determina la ubicación en función de las torres de telefonía celular, los puntos de acceso Wi-Fi y las 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 del dispositivo son diferentes. Dado que el sistema global de navegación por satélite (GNSS) suele estar activado, no se aplican penalizaciones por el aumento del uso de energía y batería. Como resultado, no se compromete el tiempo de actividad de los IVI. Nos esforzamos por minimizar los datos que se intercambian con nuestros servidores.
Por lo tanto, muchas apps usan la FLP de la API de Play en lugar de LocationManager directamente, ya que la FLP hace automáticamente lo inteligente usando el proveedor de ubicación que mejor puede satisfacer los criterios o las políticas 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 internamente la mayor parte del tiempo.
Proveedor de ubicación de red (NLP)
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 celda (y la intensidad de la señal). Como resultado y, debido a que minimizamos el uso de datos, no se proporciona ninguna implementación funcional adicional del PNL.
Proveedor de ubicación combinada
Además de usar de forma inteligente los proveedores de redes y GPS según corresponda, la FLP para dispositivos móviles fusiona información de otros sensores para mejorar aún más la calidad de las ubicaciones. Por otro lado, la implementación actual de la FLP de Automotive aprovecha las suposiciones mencionadas y usa GPS_PROVIDER como fuente subyacente en todo momento. Falsifica las posiciones del GNSS y agrega algunos errores para que sean más imprecisas cuando sea necesario. Por ejemplo, cuando se proporcionan ubicaciones aproximadas a un cliente.
Por lo tanto, en muy pocos casos, la primera posición puede tardar más de lo habitual en estar 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 que se remolca.
Diseña apps para dispositivos móviles y automóviles
En el caso de las apps que se segmentan para dispositivos móviles y para automóviles que no requieren un mayor nivel de precisión, solicita android.permission.ACCESS_COARSE_LOCATION únicamente y recurre al FLP cuando esté disponible. Como alternativa, usa GPS_PROVIDER directamente con los mismos permisos. El framework reduce la precisión de la posición del GNSS subyacente 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 de forma explícita 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 ayuda a lograr una mayor compatibilidad con dispositivos de diferentes factores de forma y, por lo tanto, una disponibilidad máxima de la app sin diferencias de código para obtener posiciones cuando sea necesario.