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 étendent la transparence et le contrôle dont les utilisateurs disposent sur leurs données, ainsi que les fonctionnalités qu'ils offrent aux applications. Ces fonctionnalités peuvent impliquer que des comportements ou des données spécifiques dont votre application dépend peuvent se comporter différemment par rapport aux anciennes versions de la plate-forme. L'impact sur votre application devrait être minime si elle suit les bonnes pratiques actuelles en matière de traitement des données utilisateur.
Cette page répertorie un résumé de chaque modification.
Principales modifications
Cette section présente les principales modifications apportées à Android 10 en matière 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 une 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 périphérique de stockage externe sans avoir à demander d'autorisations utilisateur liées au stockage :
- Fichiers dans le répertoire spécifique à l'application, accessibles à l'aide de
getExternalFilesDir(). - Photos, vidéos et clips audio créés par l'application à partir du Media Store.
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 le 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 prendre en charge le contrôle supplémentaire dont les utilisateurs disposent sur l'accès d'une application aux
informations de localisation, Android 10 introduit l'
ACCESS_BACKGROUND_LOCATION
autorisation.
Contrairement aux
ACCESS_FINE_LOCATION
et
ACCESS_COARSE_LOCATION
autorisations, l'autorisation ACCESS_BACKGROUND_LOCATION n'affecte l'accès d'une application à la position que lorsqu'elle s'exécute en arrière-plan. Une application est considérée comme accédant à la position 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 foreground service type of
location.Pour déclarer le type de service de premier plan d'un service dans votre application, définissez
targetSdkVersionoucompileSdkVersionde votre application sur29ou une version ultérieure. Découvrez comment les services de premier plan peuvent poursuivre les actions lancées par l'utilisateur qui nécessitent un 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'
ACCESS_BACKGROUND_LOCATION autorisation.
Accès accordé automatiquement lorsque vous ciblez Android 9 ou une version antérieure
Si votre application s'exécute sur Android 10 ou une version ultérieure, mais cible Android 9 (niveau d'API 28) ou une version antérieure, la plate-forme applique le comportement suivant :
- Si votre application déclare un
<uses-permission>élément pour soitACCESS_FINE_LOCATIONouACCESS_COARSE_LOCATION, le système ajoute automatiquement un<uses-permission>élément pourACCESS_BACKGROUND_LOCATIONlors de l'installation. - Si votre application demande
ACCESS_FINE_LOCATIONouACCESS_COARSE_LOCATION, le système ajoute automatiquementACCESS_BACKGROUND_LOCATIONà la requête.
Accès lors de la mise à niveau de l'appareil vers Android 10
Si un utilisateur accorde à votre application l'accès à la position de l'appareil (soit
ACCESS_COARSE_LOCATION
soit
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 la version du 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 approximative 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é automatiquement par le système lors 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 limiter 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 l'autorise toujours à recevoir ces informations de localisation.
Accès révoqué lors de la mise à jour du niveau d'API cible sur les appareils Android 10
Prenons le cas où votre application est déjà installée sur un appareil équipé d'Android 10. Si vous mettez à jour votre application pour cibler Android 10 dans ce cas, l'appareil révoque l'autorisation ACCESS_BACKGROUND_LOCATION.
Pour en savoir plus sur la récupération de la position de l'appareil lorsque votre application est en arrière-plan, consultez le guide sur la réception de mises à jour périodiques de la position.
Restrictions concernant le démarrage d'activités en arrière-plan
À partir d'Android 10, le système impose des restrictions sur le démarrage d'activités en arrière-plan. Cette modification de comportement permet de minimiser les interruptions pour l'utilisateur et de lui donner plus de contrôle sur ce qui s'affiche à l'écran. Tant que votre application démarre des activités à la suite directe d'une interaction de l'utilisateur, elle n'est probablement pas affectée par ces restrictions.
Identifiants et données
Cette section répertorie les modifications spécifiques à l'utilisation des identifiants et des données de l'appareil.
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 dans les contacts de l'utilisateur, les résultats ne sont pas classés par fréquence d'interaction.
Randomisation de l'adresse 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 réelle d'usine : les applications propriétaires de l'appareil peuvent récupérer l'
adresse MAC matérielle réelle d'un appareil en appelant
getWifiMacAddress(). Cette méthode est utile pour suivre des flottes 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 du réseau d'un appareil. Les applications
qui ont besoin d'accéder à ces informations, telles que les VPN, doivent utiliser la
NetworkStatsManager ou la
ConnectivityManager classe.
Restriction sur 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, qui incluent à la fois l'IMEI et le numéro de série.
Les méthodes concernées sont les suivantes :
BuildTelephonyManager
Si votre application ne dispose pas de l'autorisation et que vous essayez quand même 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, a
SecurityExceptionse produit. - Si votre application cible Android 9 (niveau d'API 28) ou une version antérieure, la méthode renvoie
nullou des données d'espace réservé si l'application dispose de l'READ_PHONE_STATEautorisation. Sinon, uneSecurityExceptionse 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 méthode d'entrée (IME) par défaut ou l'application actuellement sélectionnée, elle ne peut pas accéder aux données du presse-papiers sur Android 10 ou une version ultérieure.
Protection du numéro de série du périphérique USB
Si votre application cible Android 10 ou une 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 au périphérique ou à l'accessoire USB.
Caméra et connectivité
Cette section répertorie les modifications spécifiques aux métadonnées de la caméra et aux API de connectivité.
Restriction de l'accès aux détails et aux métadonnées de la caméra
Android 10 modifie l'étendue des informations renvoyées par défaut par la
getCameraCharacteristics()
méthode. En particulier, votre application doit disposer de l'autorisation
CAMERA pour
accéder aux métadonnées potentiellement spécifiques à l'appareil incluses dans la valeur
renvoyée par cette méthode.
Pour en savoir plus sur ces modifications, consultez la section sur les champs de la caméra qui nécessitent une autorisation.
Restriction sur l'activation et la désactivation du Wi-Fi
Les applications ciblant Android 10 ou une version ultérieure ne peuvent pas activer ni désactiver le Wi-Fi. La
WifiManager.setWifiEnabled()
méthode renvoie toujours false.
Si vous devez inviter les utilisateurs à activer et désactiver le Wi-Fi, utilisez un panneau de paramètres.
Restrictions sur 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 une version ultérieure et qu'il ne s'agit pas d'une application système ni d'un DPC, les méthodes suivantes ne renvoient pas de données utiles :
La
getConfiguredNetworks()méthode renvoie toujours une liste vide.Chaque méthode d'opération réseau qui renvoie une valeur entière —
addNetwork()etupdateNetwork()—renvoie toujours -1.Chaque opération réseau qui renvoie une valeur booléenne —
removeNetwork(),reassociate(),enableNetwork(),disableNetwork(),reconnect(), etdisconnect()—renvoie toujoursfalse.
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
WifiNetworkSpecifierdans un objetNetworkRequeststandard. - Pour ajouter des réseaux Wi-Fi à prendre en compte pour fournir un accès à Internet à l'
utilisateur, utilisez des
WifiNetworkSuggestionobjets. Vous pouvez ajouter et supprimer des réseaux qui s'affichent dans la boîte de dialogue de sélection automatique du réseau en appelantaddNetworkSuggestions()etremoveNetworkSuggestions(), respectivement. Ces méthodes ne nécessitent aucune autorisation de localisation.
Certaines API de téléphonie, Bluetooth et Wi-Fi nécessitent une autorisation d'accéder à la position FINE
Si votre application cible Android 10 ou une version ultérieure, elle doit disposer de l'
ACCESS_FINE_LOCATION
autorisation 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
TelephonyManagergetCellLocation()getAllCellInfo()requestNetworkScan()requestCellInfoUpdate()getAvailableNetworks()getServiceState()
TelephonyScanManagerrequestNetworkScan()
TelephonyScanManager.NetworkScanCallbackonResults()
PhoneStateListeneronCellLocationChanged()onCellInfoChanged()onServiceStateChanged()
Wi-Fi
WifiManagerstartScan()getScanResults()getConnectionInfo()getConfiguredNetworks()
WifiAwareManagerWifiP2pManagerWifiRttManager
Bluetooth
BluetoothAdapterstartDiscovery()startLeScan()
BluetoothAdapter.LeScanCallbackBluetoothLeScannerstartScan()
Autorisations
Cette section décrit les mises à jour du modèle d'autorisations Android.
Accès limité au contenu de 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 le champ d'application des autorisations READ_FRAME_BUFFER, CAPTURE_VIDEO_OUTPUT et CAPTURE_SECURE_VIDEO_OUTPUT. À partir d'Android 10, ces autorisations ne sont
accessibles que par signature.
Les applications qui doivent accéder au contenu de l'écran de l'appareil doivent utiliser l'
MediaProjection
API, qui affiche une invite demandant à l'utilisateur de donner son consentement.
Vérification des autorisations pour les applications héritées
Si votre application cible Android 5.1 (niveau d'API 22) ou une version antérieure, les utilisateurs voient un écran d'autorisations lorsqu'ils l'utilisent pour la première fois sur un appareil équipé d'Android 10 ou version ultérieure, comme illustré dans la figure 1. Cet écran permet aux utilisateurs de révoquer l'accès aux autorisations que le système a précédemment accordées à votre application lors de l'installation.
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 les déplacements en
véhicule. Cette fonctionnalité est conçue 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 de résultats que si l'utilisateur a accordé cette autorisation à votre application.
Les seuls capteurs intégrés à l' appareil qui nécessitent que vous déclariez cette autorisation sont le capteur de pas et le 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 elle remplit toutes les 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 après 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'UI
À partir d'Android 10, les applications ne peuvent plus rechercher comment les autorisations sont regroupées dans l'UI.