Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Cómo solicitar permisos de ubicación

A fin de proteger la privacidad del usuario, las apps que usan servicios de ubicación deben solicitar permisos de ubicación.

Cuando solicites permisos de ubicación, sigue las mismas prácticas recomendadas para cualquier otro permiso de tiempo de ejecución. Una diferencia importante cuando se trata de permisos de ubicación es que el sistema incluye varios permisos 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 práctico de tu app.

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

Tipos de acceso a la ubicación

Los permisos de ubicación de Android incluyen las siguientes categorías de acceso a la ubicación:

En esta sección, se describen las situaciones en las que tu app usará cada categoría.

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, se recomienda que declares 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>
    

Declara la necesidad de una ubicación en primer plano cuando tu app solicite el permiso ACCESS_COARSE_LOCATION o el permiso ACCESS_FINE_LOCATION, como se muestra en el siguiente fragmento:

<manifest ... >
  <!-- To request foreground location access, declare one of these permissions. -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

El nivel de precisión depende del permiso que solicites:

ACCESS_COARSE_LOCATION
Proporciona una precisión de ubicación de hasta una manzana.
ACCESS_FINE_LOCATION
Proporciona una ubicación más precisa que cuando solicitas ACCESS_COARSE_LOCATION. Este permiso es necesario para algunas tareas de conectividad, como la conexión con dispositivos cercanos mediante Bluetooth de bajo consumo (BLE).

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 geovallado. 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 para el hogar 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.

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>

Cómo solicitar acceso a la ubicación en el tiempo de ejecución

Cuando una función de tu app necesite acceso a la ubicación, espera hasta que el usuario interactúe con ella para solicitar el permiso. Este flujo de trabajo sigue la práctica recomendada de solicitar permisos de tiempo de ejecución en contexto, como se describe en la guía donde se explica cómo solicitar permisos de la app.

En la figura 1, se muestra un ejemplo de cómo realizar este proceso. La app contiene una función de "compartir ubicación" que requiere acceso a la ubicación en primer plano. Sin embargo, la app no solicita el permiso de ubicación hasta que el usuario selecciona el botón Compartir ubicación.

Después de que el usuario selecciona el botón Compartir ubicación, aparece el diálogo de permiso de ubicación del sistema.
Figura 1: Función Compartir ubicación que requiere acceso a la ubicación en primer plano. La función está habilitada si el usuario selecciona Permitir solo con la app en uso

Incluso si varias funciones de tu app requieren acceso a la ubicación, es probable que solo algunas de ellas requieran acceso a la ubicación en segundo plano. Por lo tanto, se recomienda que tu app realice solicitudes incrementales de permisos para obtener primero acceso a la ubicación en primer plano, y luego acceso a la ubicación en segundo plano. Cuando se realizan solicitudes incrementales, les brindas a los usuarios más control y transparencia porque pueden comprender mejor qué funciones de tu app necesitan acceso a la ubicación en segundo plano.

En la figura 2, se muestra un ejemplo de una app diseñada para manejar solicitudes incrementales. Las funciones "mostrar ubicación actual" y "recomendar lugares cercanos" requieren acceso a la ubicación en primer plano. Sin embargo, solo la función "recomendar lugares cercanos" requiere acceso a la ubicación en segundo plano.

El botón que habilita el acceso a la ubicación en primer plano se encuentra a una distancia de media pantalla con respecto al botón que habilita la ubicación en segundo plano.
Figura 2: Ambas funciones requieren acceso a la ubicación, pero solo la función "recomendar lugares cercanos" requiere acceso a la ubicación en segundo plano

El proceso para realizar solicitudes incrementales es el siguiente:

  1. Al principio, tu app debe guiar a los usuarios hacia las funciones que requieren acceso a la ubicación en primer plano, como la función "compartir ubicación" de la figura 1 o la función "mostrar ubicación actual" de la figura 2.

    Te recomendamos inhabilitar el acceso del usuario a las funciones que requieren acceso a la ubicación en segundo plano hasta que tu app tenga acceso a la ubicación en primer plano.

  2. Más adelante, cuando el usuario explore la función que requiere acceso a la ubicación en segundo plano, puedes solicitar acceso a la ubicación en segundo plano.

Cómo solicitar la ubicación en segundo plano

Figura 3: La página de configuración incluye una opción llamada Permitir todo el tiempo, que otorga acceso a la ubicación en segundo plano.

Cuando una función de tu app solicita la ubicación en segundo plano, en un dispositivo que ejecuta Android 10 (nivel de API 29), el diálogo de permisos del sistema incluye una opción llamada Permitir todo el tiempo. Si el usuario selecciona esta opción, la función en tu app obtiene acceso a la ubicación en segundo plano.

Sin embargo, en Android 11 (nivel de API 30) y versiones posteriores, el diálogo del sistema no incluye la opción Permitir todo el tiempo. En su lugar, los usuarios deben habilitar la ubicación en segundo plano, en una página de configuración, como se muestra en la figura 3.

Puedes ayudar a los usuarios a navegar hasta esta página de configuración si sigues las prácticas recomendadas cuando solicites el permiso de acceso a la ubicación en segundo plano. El proceso para otorgar el permiso depende de la versión del SDK de destino de tu app.

La app está orientada a Android 11 o versiones posteriores.

Si no se le otorgó el permiso ACCESS_BACKGROUND_LOCATION a tu app, y el objeto shouldShowRequestPermissionRationale() muestra el elemento true, enséñales a los usuarios una IU educativa que incluya lo siguiente:

  • Una explicación clara de por qué la función de tu app requiere acceso a la ubicación en segundo plano
  • La etiqueta visible para el usuario de la opción de configuración que otorga la ubicación en segundo plano (por ejemplo, Permitir todo el tiempo en la figura 3), que puede obtenerse llamando al método getBackgroundPermissionOptionLabel() El valor que se muestra de este método se localiza según la preferencia de idioma del dispositivo del usuario
  • Una opción para que los usuarios rechacen el permiso. (si los usuarios rechazan el acceso a la ubicación en segundo plano, deberían poder seguir usando tu app)
Los usuarios pueden presionar la notificación del sistema para cambiar la configuración de la ubicación de una app
Figura 4: Notificación que le recuerda al usuario que le otorgó a una app acceso a la ubicación en segundo plano

La app está orientada a Android 10 o versiones anteriores

Cuando una función de tu app solicita acceso a la ubicación en segundo plano, los usuarios ven un diálogo del sistema. Este cuadro de diálogo incluye una opción para navegar hasta las opciones de permisos de ubicación de tu app en una página de configuración.

Siempre que tu app ya siga las prácticas recomendadas de solicitud de permisos de ubicación, no es necesario que hagas ningún cambio para admitir este comportamiento.

Recordatorio de acceso a la ubicación en segundo plano

En Android 10 y versiones posteriores, cuando una función de tu app accede a la ubicación del dispositivo en segundo plano después de que el usuario otorga ese acceso, el sistema programa una notificación para enviar 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 4, se muestra una notificación de ejemplo.