Los permisos relacionados con la ubicación, el micrófono y la cámara otorgan a tu app acceso a información sensible de los usuarios. La plataforma incluye varios mecanismos, que se describen en esta página, para ayudar a los usuarios a mantenerse informados y controlar qué apps pueden acceder a la ubicación, el micrófono y la cámara.
Estas funciones del sistema que protegen la privacidad no deberían afectar la manera en la que tu app administra los permisos relacionados con la ubicación, el micrófono y la cámara, siempre y cuando cumplas las prácticas recomendadas de privacidad.
En especial, asegúrate de hacer lo siguiente en tu app:
- Espera para acceder a la cámara del dispositivo hasta que el usuario otorgue el permiso
CAMERA
a la app. - Espera para acceder al micrófono del dispositivo hasta que el usuario otorgue el permiso
RECORD_AUDIO
a la app. - Espera hasta que el usuario interactúe con una función de tu app que requiera ubicación antes de solicitar los permisos
ACCESS_COARSE_LOCATION
oACCESS_FINE_LOCATION
, según se describe en la guía sobre cómo solicitar permisos de ubicación. - Espera hasta que el usuario otorgue a tu app los permisos
ACCESS_COARSE_LOCATION
oACCESS_FINE_LOCATION
antes de solicitar el permisoACCESS_BACKGROUND_LOCATION
.
Panel de privacidad
En dispositivos compatibles que ejecutan Android 12 o versiones posteriores, aparece la pantalla del panel de privacidad en la configuración del sistema. En esta pantalla, los usuarios pueden acceder a distintas pantallas que se muestran cuando las apps acceden a la información de la ubicación, la cámara y el micrófono. En cada una, se muestra un cronograma del momento en que diferentes apps accedieron a un tipo específico de datos. En la Figura 1, se muestra el cronograma de acceso a los datos para la información de la ubicación.
Muestra los motivos del acceso a los datos
La app puede mostrarles los motivos a los usuarios para que comprendan por qué la app accede a la información de la ubicación, la cámara o el micrófono. Esos motivos pueden aparecer en la pantalla nueva del panel de privacidad, en la pantalla de permisos de la app o en ambas.
Para explicar por qué la app accede a la información de la ubicación, la cámara y el micrófono, sigue estos pasos:
Agrega una actividad que, cuando se inicie, brinde algún motivo que explique por qué la app realiza un tipo particular de acción para acceder a datos. Dentro de esa actividad, establece el atributo
android:permission
enSTART_VIEW_PERMISSION_USAGE
.Si la app se orienta a Android 12 o versiones posteriores, debes definir un valor para el atributo
android:exported
de forma explícita.Agrega el siguiente filtro de intents a la actividad recién añadida:
<!-- android:exported required if you target Android 12. --> <activity android:name=".DataAccessRationaleActivity" android:permission="android.permission.START_VIEW_PERMISSION_USAGE" android:exported="true"> <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on your app permission's page in system settings. VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information icon on the Privacy Dashboard screen. --> <intent-filter> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" /> <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" /> <category android:name="android.intent.category.DEFAULT" /> ... </intent-filter> </activity>
Decide qué debe mostrar la actividad de los motivos del acceso a tus datos. Por ejemplo, puedes mostrar el sitio web de la app o un artículo del Centro de ayuda. Para brindar una explicación más detallada sobre los tipos de datos a los que accede la app y el momento en que se produjo este acceso, controla los valores adicionales que el sistema incluye cuando invoca el intent de uso de permisos:
- Si el sistema invoca a
ACTION_VIEW_PERMISSION_USAGE
, la app puede recuperar un valor paraEXTRA_PERMISSION_GROUP_NAME
. - Si el sistema invoca a
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
, la app puede recuperar valores paraEXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
yEXTRA_END_TIME
.
- Si el sistema invoca a
Según los filtros de intents que agregues, los usuarios verán un ícono de información junto al nombre de la app en determinadas pantallas:
- Si agregas el filtro de intents que incluye la acción
VIEW_PERMISSION_USAGE
, los usuarios verán el ícono en la página de permisos de la app en la configuración del sistema. Puedes aplicar esta acción a todos los permisos de tiempo de ejecución. - Si agregas el filtro de intents que incluye la acción
VIEW_PERMISSION_USAGE_FOR_PERIOD
, los usuarios verán el ícono junto al nombre de la app cada vez que esta aparezca en la pantalla del panel de privacidad.
Cuando los usuarios seleccionan ese ícono, se inicia la actividad de los motivos de la app.
Indicadores
En dispositivos que ejecutan Android 12 y versiones posteriores, cuando una app accede al micrófono o a la cámara, aparece un ícono en la barra de estado. Si la app está en modo envolvente, el ícono aparece en la esquina superior derecha de la pantalla. Los usuarios pueden abrir Configuración rápida y seleccionar el ícono para ver qué apps están usando el micrófono o la cámara en ese momento. En la Figura 2, se muestra un ejemplo de captura de pantalla que contiene los íconos.
Cómo identificar la ubicación en la pantalla de los indicadores
Si tu app admite el modo envolvente o una IU de pantalla completa, los indicadores pueden superponerse temporalmente a la IU de tu app. Para ayudar a adaptar la IU a estos indicadores, el sistema introduce el método getPrivacyIndicatorBounds()
, que se muestra en el siguiente fragmento de código. Esta API te permite identificar los límites en los que pueden aparecer los indicadores. Es posible que luego decidas organizar la IU de la pantalla de manera diferente.
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
Botones de activación
En los dispositivos compatibles que ejecutan Android 12 o versiones posteriores, los usuarios pueden habilitar o inhabilitar el acceso a la cámara y al micrófono para todas las apps del dispositivo presionando una sola opción de activación. Los usuarios pueden acceder a opciones que se pueden activar o desactivar desde Configuración rápida, como se muestra en la Figura 3, o desde la pantalla de privacidad en la configuración del sistema.
Los botones de activación de la cámara y del micrófono afectan a todas las apps del dispositivo:
- Cuando el usuario desactiva el acceso a la cámara, tu app recibe un feed de cámara en blanco.
Cuando desactiva el acceso al micrófono, recibe audio vacío. Además, los sensores de movimiento tienen un límite de frecuencia, independientemente de si declaras el permiso
HIGH_SAMPLING_RATE_SENSORS
.
Cuando el usuario desactiva el acceso a la cámara o al micrófono, y luego inicia una app que necesita acceder a la información de estos, el sistema le recuerda al usuario que se desactivó el botón de activación para todo el dispositivo.
Cómo verificar la compatibilidad de tus dispositivos
Para comprobar si un dispositivo admite los botones de activación del micrófono y de la cámara, agrega la lógica que aparece en el siguiente fragmento de código:
Kotlin
val sensorPrivacyManager = applicationContext .getSystemService(SensorPrivacyManager::class.java) as SensorPrivacyManager val supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE) val supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA)
Java
SensorPrivacyManager sensorPrivacyManager = getApplicationContext() .getSystemService(SensorPrivacyManager.class); boolean supportsMicrophoneToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.MICROPHONE); boolean supportsCameraToggle = sensorPrivacyManager .supportsSensorToggle(Sensors.CAMERA);