Les autorisations associées à la localisation, au micro et à l'appareil photo permettent à votre application d'accéder à des informations particulièrement sensibles sur les utilisateurs. La plate-forme comprend plusieurs mécanismes, décrits sur cette page, pour aider les utilisateurs à suivre et à contrôler les applications autorisées à accéder à ces informations.
Ces fonctionnalités système de protection de la confidentialité ne devraient pas affecter la façon dont votre application gère les autorisations liées à la localisation, au micro et à l'appareil photo, pour autant que vous suiviez les bonnes pratiques concernant la confidentialité.
Vous devez, en particulier, veiller à respecter les règles suivantes dans votre application :
- Attendre que l'utilisateur ait accordé l'autorisation
CAMERA
à votre application avant d'accéder à l'appareil photo. - Attendre que l'utilisateur ait accordé l'autorisation
RECORD_AUDIO
à votre application avant d'accéder au micro de l'appareil. - Attendre que l'utilisateur interagisse avec une fonctionnalité de votre application nécessitant l'activation de la géolocalisation avant de demander l'autorisation
ACCESS_COARSE_LOCATION
ouACCESS_FINE_LOCATION
, comme indiqué dans le guide qui explique comment demander l'autorisation d'accéder à la position. - Attendre que l'utilisateur accorde à votre application l'autorisation
ACCESS_COARSE_LOCATION
ouACCESS_FINE_LOCATION
avant de demander l'autorisationACCESS_BACKGROUND_LOCATION
.
Tableau de bord Confidentialité
Sur les appareils compatibles équipés d'Android 12 ou version ultérieure, un écran "Tableau de bord Confidentialité" est disponible dans les paramètres système. Il permet aux utilisateurs d'accéder à des écrans distincts qui s'affichent lorsque les applications accèdent aux informations concernant la localisation, au micro et à l'appareil photo. Chaque écran montre à quel moment les différentes applications ont accédé à un type de données spécifique. La figure 1 présente la chronologie d'accès aux données de localisation.
Afficher le motif d'accès aux données
Votre application peut fournir une justification aux utilisateurs pour les aider à comprendre pourquoi elle accède aux informations concernant la localisation, au micro ou à l'appareil photo. Cette justification peut être affichée sur le nouvel écran "Tableau de bord Confidentialité", sur l'écran des autorisations de votre application ou sur les deux.
Pour expliquer pourquoi votre application accède à ces informations, procédez comme suit :
Ajoutez une activité qui, lorsqu'elle est lancée, explique pourquoi votre application effectue un type particulier d'accès aux données. Dans cette activité, définissez l'attribut
android:permission
surSTART_VIEW_PERMISSION_USAGE
.Si votre application cible Android 12 ou version ultérieure, vous devez définir explicitement une valeur pour l'attribut
android:exported
.Ajoutez le filtre d'intent suivant à la nouvelle activité :
<!-- 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>
Déterminez les éléments que doit afficher votre activité de justification d'accès aux données. Vous pouvez, par exemple, afficher le site Web de votre application ou un article du centre d'aide. Pour fournir plus de détails sur les types de données auxquels votre application a accès, ainsi que la chronologie des accès, gérez les extras que le système inclut lorsqu'il appelle l'intent d'utilisation des autorisations :
- Si le système appelle
ACTION_VIEW_PERMISSION_USAGE
, votre application peut récupérer une valeur pourEXTRA_PERMISSION_GROUP_NAME
. - Si le système appelle
ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD
, votre application peut récupérer des valeurs pourEXTRA_PERMISSION_GROUP_NAME
,EXTRA_ATTRIBUTION_TAGS
,EXTRA_START_TIME
etEXTRA_END_TIME
.
- Si le système appelle
En fonction des filtres d'intent que vous ajoutez, une icône d'information est affichée à côté du nom de votre application sur certains écrans :
- Si vous ajoutez le filtre d'intent contenant l'action
VIEW_PERMISSION_USAGE
, l'icône est affichée sur la page des autorisations de votre application dans les paramètres système. Vous pouvez appliquer cette action à l'ensemble des autorisations d'exécution. - Si vous ajoutez le filtre d'intent contenant l'action
VIEW_PERMISSION_USAGE_FOR_PERIOD
, l'icône est affichée à côté du nom de votre application chaque fois qu'elle apparaît dans l'écran "Tableau de bord Confidentialité".
L'activité de justification de votre application est lancée lorsque l'utilisateur sélectionne cette icône.
Indicateurs
Sur les appareils équipés d'Android 12 ou version ultérieure, lorsqu'une application accède au micro ou à l'appareil photo, une icône s'affiche dans la barre d'état. Si l'application est en mode immersif, l'icône s'affiche en haut à droite de l'écran. Les utilisateurs peuvent ouvrir les réglages rapides et sélectionner l'icône pour voir quelles sont les applications qui utilisent actuellement le micro ou l'appareil photo. La figure 2 montre un exemple de capture d'écran contenant les icônes.
Identifier l'emplacement des indicateurs à l'écran
Si votre application prend en charge le mode immersif ou une UI plein écran, il se peut que les indicateurs recouvrent temporairement l'UI de votre application. Pour vous aider à adapter votre UI à ces indicateurs, le système propose maintenant la méthode getPrivacyIndicatorBounds()
, comme le montre l'extrait de code suivant. Cette API vous permet d'identifier les limites d'affichage des indicateurs. Vous pouvez ensuite décider d'organiser différemment l'UI de votre écran.
Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets -> val indicatorBounds = windowInsets.getPrivacyIndicatorBounds() // change your UI to avoid overlapping windowInsets }
Boutons d'activation/de désactivation
Sur les appareils compatibles équipés d'Android 12 ou version ultérieure, les utilisateurs peuvent activer et désactiver l'accès à la caméra et au micro pour toutes les applications installées en appuyant simplement sur un bouton. Les utilisateurs peuvent accéder aux options d'activation/de désactivation à partir des Réglages rapides, comme illustré à la figure 3, ou à partir de l'écran "Confidentialité" des paramètres système.
Les boutons d'activation/de désactivation de l'accès à l'appareil photo et au micro affectent toutes les applications installées sur l'appareil :
- Lorsque l'utilisateur désactive l'accès à l'appareil photo, votre application reçoit un flux d'appareil photo vide.
Lorsque l'utilisateur désactive l'accès au micro, votre application reçoit un flux audio silencieux. De plus, le débit des capteurs de mouvement est limité, et ce, que vous déclariez ou non l'autorisation
HIGH_SAMPLING_RATE_SENSORS
.
Lorsque l'utilisateur désactive l'accès à l'appareil photo ou au micro, puis lance une application qui doit accéder à ces informations, le système lui rappelle que l'option correspondante est désactivée au niveau de l'appareil.
Vérifier la compatibilité de l'appareil
Pour vérifier si un appareil prend en charge l'activation/la désactivation de l'accès au micro et à l'appareil photo, ajoutez la logique indiquée dans l'extrait de code suivant :
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);