Solicita permisos de ubicación

Para proteger la privacidad del usuario, las apps que usan servicios de ubicación deben solicitar los permisos correspondientes.

Varios permisos están relacionados con la ubicación. Los permisos que solicites y el modo en que los solicites dependerán de los requisitos de ubicación del caso de uso de tu app.

En esta página, se describen los diferentes tipos de requisitos de ubicación y se explica cómo solicitar permisos de ubicación en cada caso.

Para solicitar permisos de ubicación, sigue las prácticas recomendadas para todos los permisos de tiempo de ejecución.

Tipos de acceso a la ubicación

Cada permiso tiene una combinación de las siguientes características:

Ubicación en primer plano

Si tu app contiene una función que comparte o recibe información de ubicación solo una vez o durante un tiempo definido, esa función requiere acceso a la ubicación en primer plano. Estos son algunos ejemplos:

  • Dentro de una app de navegación, una función permite a los usuarios obtener instrucciones paso a paso.
  • Dentro de una app de mensajería, una función permite a los usuarios compartir su ubicación actual con otro usuario.

El sistema considera que tu app usa la ubicación en primer plano si una función accede a la ubicación actual del dispositivo en una de las siguientes situaciones:

  • Una actividad que pertenece a tu app es visible.
  • Tu app ejecuta un servicio en primer plano. Cuando se ejecuta un servicio en primer plano, el sistema muestra una notificación persistente para atraer la atención del usuario. Tu app conserva el acceso cuando se coloca en segundo plano, por ejemplo, cuando el usuario presiona el botón Inicio en su dispositivo o apaga la pantalla.

    Además, debes declarar un tipo de servicio en primer plano de location, como se muestra en el siguiente fragmento de código. En Android 10 (nivel de API 29) y versiones posteriores, debes declarar este tipo de servicio en primer plano.

    <!-- Recommended for Android 9 (API level 28) and lower. -->
    <!-- Required for Android 10 (API level 29) and higher. -->
    <service
        android:name="MyNavigationService"
        android:foregroundServiceType="location" ... >
        <!-- Any inner elements would go here. -->
    </service>
    

Declaras la necesidad de una ubicación en primer plano cuando tu app solicita los permisos ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION, como se muestra en el siguiente fragmento:

<manifest ... >
  <!-- Always include this permission -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

  <!-- Include only if your app benefits from precise location access. -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

Ubicación en segundo plano

Una app requiere acceso a la ubicación en segundo plano si una función dentro de la app comparte constantemente la ubicación con otros usuarios o usa la API de Geofencing. Entre los ejemplos, se incluyen los siguientes:

  • Dentro de una app familiar para compartir la ubicación, una función permite que los usuarios compartan la ubicación de forma continua con los miembros de la familia.
  • Dentro de una app de IoT, una función permite al usuario configurar sus dispositivos de la casa, de modo que se apaguen cuando el usuario salga de su casa y se vuelvan a activar cuando regrese.

El sistema considera que tu app usa la ubicación en segundo plano si accede a la ubicación actual del dispositivo en una situación diferente de la descrita en la sección Ubicación en primer plano. La precisión de la ubicación en segundo plano es la misma que la precisión de la ubicación en primer plano, que depende de los permisos de ubicación que declare tu app.

En Android 10 (nivel de API 29) y versiones posteriores, debes declarar el permiso ACCESS_BACKGROUND_LOCATION en el manifiesto de tu app para solicitar acceso a la ubicación en segundo plano durante el tiempo de ejecución. En las versiones anteriores de Android, cuando tu app recibe acceso a la ubicación en primer plano, también recibe automáticamente acceso a la ubicación en segundo plano.

<manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Precisión

Android admite los siguientes niveles de precisión de la ubicación:

Aproximada
Proporciona una estimación de la ubicación del dispositivo. Si esta estimación de la ubicación es de LocationManagerService o FusedLocationProvider, la estimación es exacta en un radio de 3 kilómetros cuadrados (aproximadamente, 1.2 millas cuadradas). Tu app puede recibir ubicaciones con este nivel de precisión cuando declaras el permiso ACCESS_COARSE_LOCATION, pero no el permiso ACCESS_FINE_LOCATION.
Precisa
Proporciona una estimación de la ubicación del dispositivo que sea lo más precisa posible. Si la estimación de la ubicación es de LocationManagerService o FusedLocationProvider, suele ser de 50 metros (160 pies) y, a veces, tan precisa como de unos pocos metros (10 pies) o mejor. Tu app puede recibir ubicaciones con este nivel de precisión cuando declaras el permiso ACCESS_FINE_LOCATION.

Si el usuario otorga el permiso de ubicación aproximada, tu app solo tendrá acceso a la ubicación aproximada, independientemente de los permisos de ubicación que declare.

Tu app debería funcionar cuando el usuario solo otorgue acceso a la ubicación aproximada. Si una función de tu app requiere acceso a una ubicación precisa con el permiso ACCESS_FINE_LOCATION, puedes pedirle al usuario que permita que tu app acceda a la ubicación precisa.

Recordatorio de acceso a la ubicación en segundo plano

En Android 10 (nivel de API 29) y versiones posteriores, cuando una función de tu app accede a la ubicación del dispositivo en segundo plano por primera vez después de que el usuario otorga ese acceso, el sistema programa el envío de una notificación al usuario. a fin de recordarle que le otorgó a tu app acceso a la ubicación del dispositivo en todo momento. En la figura 8, se muestra una notificación de ejemplo.

Cómo verificar los requisitos de ubicación en las dependencias del SDK de la app

Verifica si tu app usa algún SDK que dependa de los permisos de ubicación, especialmente ACCESS_FINE_LOCATION. Para obtener más información, lee la entrada de blog Conoce los comportamientos de las dependencias de tu SDK en Medium.

Recursos adicionales

Para obtener más información sobre los permisos de ubicación en Android, consulta los siguientes materiales:

Codelabs

Videos

Ejemplos