Modifications apportées à la confidentialité dans Android 10

Android 10 (niveau d'API 29) introduit un certain nombre de fonctionnalités et de modifications de comportement pour mieux protéger la confidentialité des utilisateurs. Ces modifications renforcent la transparence et le contrôle des utilisateurs sur leurs données et les fonctionnalités qu'ils accordent aux applications. Ces fonctionnalités peuvent entraîner des comportements ou des données spécifiques sur lesquels votre application dépend, qui peuvent se comporter différemment par rapport aux anciennes versions de la plate-forme. Les impacts sur votre application devraient être minimes si elle respecte les bonnes pratiques actuelles pour la gestion des données utilisateur.

Cette page présente un résumé de chaque modification.

Principaux changements

Cette section inclut les principales modifications apportées à Android 10 en termes de confidentialité.

Accès au stockage externe limité aux fichiers et aux contenus multimédias de l'application

Par défaut, les applications ciblant Android 10 ou version ultérieure bénéficient d'un accès limité au stockage externe, ou espace de stockage cloisonné. Ces applications peuvent afficher les types de fichiers suivants sur un appareil de stockage externe sans avoir à demander d'autorisations utilisateur liées au stockage:

  • Fichiers du répertoire spécifique à l'application, accessibles à l'aide de getExternalFilesDir().
  • Photos, vidéos et extraits audio créés par l'application à partir du MediaStore

Pour en savoir plus sur l'espace de stockage cloisonné, ainsi que sur le partage, l'accès et la modification des fichiers enregistrés sur des périphériques de stockage externes, consultez les guides sur la gestion des fichiers dans l'espace de stockage externe et sur l'accès et la modification des fichiers multimédias.

L'accès à la position de l'appareil en arrière-plan nécessite une autorisation

Pour permettre aux utilisateurs de contrôler davantage l'accès d'une application aux informations de localisation, Android 10 introduit l'autorisation ACCESS_BACKGROUND_LOCATION.

Contrairement aux autorisations ACCESS_FINE_LOCATION et ACCESS_COARSE_LOCATION, l'autorisation ACCESS_BACKGROUND_LOCATION n'affecte que l'accès d'une application aux données de localisation lorsqu'elle s'exécute en arrière-plan. Une application est considérée comme accédant aux données de localisation en arrière-plan, sauf si l'une des conditions suivantes est remplie:

  • Une activité appartenant à l'application est visible.
  • L'application exécute un service de premier plan qui a déclaré un type de service de premier plan de location.

    Pour déclarer le type de service de premier plan pour un service dans votre application, définissez targetSdkVersion ou compileSdkVersion de votre application sur 29 ou une version ultérieure. Découvrez comment les services de premier plan peuvent continuer les actions déclenchées par l'utilisateur qui nécessitent l'accès à la position.

Si votre application crée et surveille des géorepérages et cible Android 10 (niveau d'API 29) ou une version ultérieure, vous devez déclarer l'autorisation ACCESS_BACKGROUND_LOCATION.

Accès accordé automatiquement lorsque vous ciblez Android 9 ou version antérieure

Si votre application s'exécute sur Android 10 ou version ultérieure, mais cible Android 9 (niveau d'API 28) ou version antérieure, la plate-forme applique le comportement suivant:

  • Si votre application déclare un élément <uses-permission> pour ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION, le système ajoute automatiquement un élément <uses-permission> pour ACCESS_BACKGROUND_LOCATION lors de l'installation.
  • Si votre application demande ACCESS_FINE_LOCATION ou ACCESS_COARSE_LOCATION, le système ajoute automatiquement ACCESS_BACKGROUND_LOCATION à la requête.

Accès lorsque l'appareil est mis à niveau vers Android 10

Si un utilisateur accorde à votre application l'accès à la position de l'appareil (ACCESS_COARSE_LOCATION ou ACCESS_FINE_LOCATION), puis met à niveau son appareil d'Android 9 vers Android 10, le système met automatiquement à jour l'ensemble des autorisations basées sur la position accordées à votre application. L'ensemble des autorisations que votre application reçoit après la mise à niveau dépend de sa version de SDK cible et des autorisations définies, comme indiqué dans le tableau suivant:

Tableau 1. Modifications de l'état de l'autorisation d'accéder à la position après la mise à niveau de l'appareil vers Android 10

Version de la plate-forme cible Autorisation globale ou précise
accordée ?
Autorisation en arrière-plan
définie dans le fichier manifeste ?
État de l'autorisation par défaut mis à jour
Android 10 Oui Oui Accès au premier plan et en arrière-plan
Android 10 Oui Non Accès au premier plan uniquement
Android 10 Non (Ignoré par le système) Aucun accès
Android 9 ou version antérieure Oui Ajout automatique par le système au moment de la mise à niveau de l'appareil Accès au premier plan et en arrière-plan
Android 9 ou version antérieure Non (Ignoré par le système) Aucun accès

Notez que l'utilisateur peut modifier ce niveau d'accès même après que le système a automatiquement mis à jour l'accès de votre application à la position de l'appareil. Par exemple, l'utilisateur peut réduire l'accès de votre application au premier plan uniquement ou révoquer complètement l'accès. Avant de tenter d'accéder à la position de l'appareil, en particulier dans un service de premier plan, votre application doit vérifier si l'utilisateur autorise toujours votre application à recevoir ces informations de localisation.

Révocation de l'accès lors de la mise à jour du niveau d'API cible sur les appareils Android 10

Imaginons que votre application soit déjà installée sur un appareil équipé d'Android 10. Dans ce cas, si vous mettez à jour votre application pour cibler Android 10, l'appareil révoque l'autorisation ACCESS_BACKGROUND_LOCATION.

Pour savoir comment récupérer la position de l'appareil lorsque votre application est en arrière-plan, consultez le guide sur la réception de notifications de position périodiques.

Restrictions concernant le démarrage d'activités en arrière-plan

À partir d'Android 10, le système limite le démarrage d'activités en arrière-plan. Ce changement de comportement permet de réduire les interruptions pour l'utilisateur et de mieux contrôler ce qui s'affiche à l'écran. Tant que votre application démarre des activités en raison directe de l'interaction de l'utilisateur, elle n'est probablement pas affectée par ces restrictions.

Pour en savoir plus sur l'alternative recommandée au démarrage d'activités en arrière-plan, consultez le guide expliquant comment avertir les utilisateurs des événements urgents dans votre application.

Identifiants et données

Cette section liste les modifications spécifiques à l'utilisation des identifiants et des données des appareils.

Suppression de l'affinité des contacts

À partir d'Android 10, la plate-forme ne suit plus les informations d'affinité des contacts. Par conséquent, si votre application effectue une recherche sur les contacts de l'utilisateur, les résultats ne sont pas triés par fréquence d'interaction.

Le guide sur ContactsProvider contient une notification décrivant les champs et méthodes spécifiques obsolètes sur tous les appareils à partir d'Android 10.

Randomisation des adresses MAC

Sur les appareils équipés d'Android 10 ou version ultérieure, le système transmet des adresses MAC aléatoires par défaut.

Si votre application gère un cas d'utilisation d'entreprise, la plate-forme fournit des API pour plusieurs opérations liées aux adresses MAC:

  • Obtenir une adresse MAC aléatoire:les applications propriétaires de l'appareil et les applications propriétaires du profil peuvent récupérer l'adresse MAC aléatoire attribuée à un réseau spécifique en appelant getRandomizedMacAddress().
  • Obtenir l'adresse MAC d'usine:les applications propriétaires de l'appareil peuvent récupérer l'adresse MAC matérielle réelle de l'appareil en appelant getWifiMacAddress(). Cette méthode est utile pour suivre des parcs d'appareils.

Restriction de l'accès au système de fichiers /proc/net

Sur les appareils équipés d'Android 10 ou version ultérieure, les applications ne peuvent pas accéder à /proc/net, qui inclut des informations sur l'état réseau d'un appareil. Les applications qui ont besoin d'accéder à ces informations, telles que les VPN, doivent utiliser la classe NetworkStatsManager ou ConnectivityManager.

Restriction concernant les identifiants d'appareil non réinitialisables

À partir d'Android 10, les applications doivent disposer de l'autorisation privilégiée READ_PRIVILEGED_PHONE_STATE pour accéder aux identifiants non réinitialisables de l'appareil, y compris l'IMEI et le numéro de série.

Les méthodes suivantes sont concernées:

Si votre application ne dispose pas de cette autorisation et que vous essayez de demander des informations sur les identifiants non réinitialisables, la réponse de la plate-forme varie en fonction de la version du SDK cible:

  • Si votre application cible Android 10 ou une version ultérieure, une erreur SecurityException se produit.
  • Si votre application cible Android 9 (niveau d'API 28) ou une version antérieure, la méthode renvoie null ou des données d'espace réservé si l'application dispose de l'autorisation READ_PHONE_STATE. Dans le cas contraire, une erreur SecurityException se produit.

De nombreux cas d'utilisation n'ont pas besoin d'identifiants d'appareil non réinitialisables. Par exemple, si votre application utilise des identifiants d'appareil non réinitialisables à des fins de suivi des annonces ou d'analyse des utilisateurs, utilisez plutôt un identifiant publicitaire Android pour ces cas d'utilisation spécifiques. Pour en savoir plus, consultez les bonnes pratiques concernant les identifiants uniques.

Accès limité aux données du presse-papiers

Sauf si votre application est l'éditeur de mode de saisie (IME) par défaut ou l'application active, elle ne peut pas accéder aux données du presse-papiers sur Android 10 ou version ultérieure.

Protection du numéro de série de l'appareil USB

Si votre application cible Android 10 ou version ultérieure, elle ne peut pas lire le numéro de série tant que l'utilisateur ne lui a pas accordé l'autorisation d'accéder à l'appareil ou à l'accessoire USB.

Pour en savoir plus sur l'utilisation des appareils USB, consultez le guide sur la configuration des hôtes USB.

Appareil photo et connectivité

Cette section liste les modifications spécifiques aux métadonnées de l'appareil photo et aux API de connectivité.

Restriction de l'accès aux informations et aux métadonnées de l'appareil photo

Android 10 modifie l'étendue des informations renvoyées par défaut par la méthode getCameraCharacteristics(). En particulier, votre application doit disposer de l'autorisation CAMERA pour accéder aux métadonnées potentiellement spécifiques à l'appareil qui sont incluses dans la valeur renvoyée par cette méthode.

Pour en savoir plus sur ces modifications, consultez la section sur les champs de caméra nécessitant une autorisation.

Restriction concernant l'activation et la désactivation du Wi-Fi

Les applications ciblant Android 10 ou version ultérieure ne peuvent pas activer ni désactiver le Wi-Fi. La méthode WifiManager.setWifiEnabled() renvoie toujours false.

Si vous devez inviter les utilisateurs à activer et à désactiver le Wi-Fi, utilisez un panneau de paramètres.

Restrictions concernant l'accès direct aux réseaux Wi-Fi configurés

Pour protéger la confidentialité des utilisateurs, la configuration manuelle de la liste des réseaux Wi-Fi est limitée aux applications système et aux contrôleurs de stratégie d'appareil (DPC). Un DPC donné peut être le propriétaire de l'appareil ou le propriétaire du profil.

Si votre application cible Android 10 ou version ultérieure, et qu'elle n'est pas une application système ni un DPC, les méthodes suivantes ne renvoient pas de données utiles:

Si votre application doit se connecter à des réseaux Wi-Fi, utilisez les méthodes alternatives suivantes:

  • Pour déclencher une connexion locale instantanée à un réseau Wi-Fi, utilisez WifiNetworkSpecifier dans un objet NetworkRequest standard.
  • Pour ajouter des réseaux Wi-Fi à prendre en compte pour fournir un accès Internet à l'utilisateur, utilisez des objets WifiNetworkSuggestion. Vous pouvez ajouter et supprimer des réseaux qui apparaissent dans la boîte de dialogue de sélection du réseau de connexion automatique en appelant addNetworkSuggestions() et removeNetworkSuggestions(), respectivement. Ces méthodes ne nécessitent aucune autorisation d'accéder à la position.

Certaines API de téléphonie, Bluetooth et Wi-Fi nécessitent l'autorisation de localisation précise

Si votre application cible Android 10 ou une version ultérieure, elle doit disposer de l'autorisation ACCESS_FINE_LOCATION pour utiliser plusieurs méthodes dans les API Wi-Fi, Wi-Fi Aware ou Bluetooth. Les sections suivantes listent les classes et méthodes concernées.

Téléphonie

Wi-Fi

Bluetooth

Autorisations

Cette section décrit les modifications apportées au modèle d'autorisations Android.

A limité l'accès au contenu affiché à l'écran

Pour protéger le contenu de l'écran des utilisateurs, Android 10 empêche l'accès silencieux au contenu de l'écran de l'appareil en modifiant la portée des autorisations READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT et CAPTURE_SECURE_VIDEO_OUTPUT. Depuis Android 10, ces autorisations ne sont disponibles que pour l'accès par signature.

Les applications qui doivent accéder au contenu de l'écran de l'appareil doivent utiliser l'API MediaProjection, qui affiche une invite demandant à l'utilisateur d'accepter.

Vérification des autorisations visibles par l'utilisateur dans les anciennes applications

Si votre application cible Android 5.1 (niveau d'API 22) ou version antérieure, les utilisateurs voient un écran d'autorisations lorsqu'ils utilisent votre application pour la première fois sur un appareil exécutant Android 10 ou version ultérieure, comme illustré à la figure 1. Cet écran permet aux utilisateurs de révoquer l'accès aux autorisations que le système avait précédemment accordées à votre application au moment de l'installation.

Capture d&#39;écran de la boîte de dialogue
Figure 1. Boîte de dialogue destinée à l'utilisateur permettant de consulter les anciennes autorisations

Reconnaissance de l'activité physique

Android 10 introduit l'autorisation d'exécution android.permission.ACTIVITY_RECOGNITION pour les applications qui doivent détecter le nombre de pas de l'utilisateur ou classer son activité physique, comme la marche, le vélo ou le déplacement dans un véhicule. Il est conçu pour permettre aux utilisateurs de voir comment les données des capteurs de l'appareil sont utilisées dans les paramètres.

Certaines bibliothèques des services Google Play, telles que l'API Activity Recognition et l'API Google Fit, ne fournissent pas de résultats, sauf si l'utilisateur a accordé cette autorisation à votre application.

Les seuls capteurs intégrés de l'appareil qui nécessitent de déclarer cette autorisation sont les capteurs compteur de pas et détecteur de pas.

Si votre application cible Android 9 (niveau d'API 28) ou une version antérieure, le système accorde automatiquement l'autorisation android.permission.ACTIVITY_RECOGNITION à votre application, si nécessaire, si votre application remplit chacune des conditions suivantes:

  • Le fichier manifeste inclut l'autorisation com.google.android.gms.permission.ACTIVITY_RECOGNITION.
  • Le fichier manifeste n'inclut pas l'autorisation android.permission.ACTIVITY_RECOGNITION.

Si le système accorde automatiquement l'autorisation android.permission.ACTIVITY_RECOGNITION, votre application conserve l'autorisation une fois que vous l'avez mise à jour pour cibler Android 10. Toutefois, l'utilisateur peut révoquer cette autorisation à tout moment dans les paramètres système.

Groupes d'autorisations supprimés de l'interface utilisateur

Depuis Android 10, les applications ne peuvent plus rechercher la façon dont les autorisations sont regroupées dans l'UI.