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 que les utilisateurs exercent sur leurs données et sur les fonctionnalités qu'ils offrent aux applications. Ces fonctionnalités peuvent signifier que des comportements ou des données spécifiques dont dépend votre application peuvent se comporter différemment des anciennes versions de la plate-forme. L'impact sur votre application devrait être minimal si elle respecte les bonnes pratiques actuelles de gestion des données utilisateur.
Cette page fournit un résumé de chaque modification.
Principales modifications
Cette section inclut les principales modifications apportées à Android 10 concernant la confidentialité.
Accès au stockage externe limité aux fichiers d'application et aux contenus multimédias
Par défaut, les applications ciblant Android 10 ou version ultérieure bénéficient d'un accès limité à un espace de stockage externe, ou espace de stockage cloisonné. Ces applications peuvent voir les types de fichiers suivants dans un périphérique 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 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 aux fichiers multimédias et leur modification.
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 disposent les utilisateurs sur 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 l'accès d'une application à la localisation que 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é
location
comme type de service de premier plan.Pour déclarer le type de service de premier plan pour un service de votre application, définissez le paramètre
targetSdkVersion
oucompileSdkVersion
de votre application sur29
ou une valeur supérieure. Découvrez comment les services de premier plan peuvent continuer les actions déclenchées par l'utilisateur qui nécessitent un accès à la position.
Si votre application crée et surveille des zones de géorepérage et cible Android 10 (niveau d'API 29) ou version ultérieure, vous devez déclarer l'autorisation ACCESS_BACKGROUND_LOCATION
.
Accès accordé automatiquement lorsque vous ciblez Android 9 ou une version antérieure
Si votre application s'exécute sous Android 10 ou 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 élément
<uses-permission>
pourACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, le système ajoute automatiquement un élément<uses-permission>
pourACCESS_BACKGROUND_LOCATION
lors de l'installation. - Si votre application demande
ACCESS_FINE_LOCATION
ouACCESS_COARSE_LOCATION
, le système ajoute automatiquementACCESS_BACKGROUND_LOCATION
à la requête.
Accès lorsque l'appareil est mis à niveau vers Android 10
Si un utilisateur autorise votre application à accéder à la position de l'appareil (ACCESS_COARSE_LOCATION
ou ACCESS_FINE_LOCATION
), puis fait passer son appareil d'Android 9 à 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 reçues par votre application après la mise à niveau dépend de la version du SDK cible et des autorisations définies, comme indiqué dans le tableau suivant:
Version de la plate-forme cible | Autorisation grossière ou précise accordée ? |
Autorisation d'arrière-plan définie dans le fichier manifeste ? |
État d'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 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 une fois 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 d'essayer 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.
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 exécutant Android 10. Si vous mettez à jour votre application pour cibler Android 10 dans cette situation, l'appareil révoque l'autorisation ACCESS_BACKGROUND_LOCATION
.
Pour savoir comment récupérer la position de l'appareil lorsque votre application est exécutée 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. Ce changement de comportement permet de minimiser les interruptions pour l'utilisateur et de lui permettre de mieux contrôler ce qui s'affiche à l'écran. Tant que votre application démarre des activités directement suite à une 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 sur l'alerte pour les utilisateurs en cas d'événements urgents dans votre application.
Identifiants et données
Cette section liste les modifications spécifiques concernant l'utilisation des identifiants et des données des appareils.
Suppression de l'affinité de contact
À partir d'Android 10, la plate-forme ne suit pas 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 classés par fréquence des interactions.
Le guide sur ContactsProvider
contient une notification décrivant les champs et méthodes spécifiques qui sont obsolètes sur tous les appareils à partir d'Android 10.
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 en entreprise, la plate-forme fournit des API pour plusieurs opérations liées aux adresses MAC:
- Obtenir une adresse MAC aléatoire:les applications de propriétaires d'appareils et de propriétaires de 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 réelle:les applications de propriétaires d'appareils peuvent récupérer l'adresse MAC matérielle réelle d'un appareil en appelant
getWifiMacAddress()
. Cette méthode est utile pour suivre les parcs d'appareils.
Restriction d'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 classe NetworkStatsManager
ou ConnectivityManager
.
Restrictions concernant les identifiants d'appareils 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 le code IMEI et le numéro de série.
Les méthodes suivantes sont concernées:
Build
TelephonyManager
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, 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'autorisationREAD_PHONE_STATE
. Sinon, une erreurSecurityException
se produit.
De nombreux cas d'utilisation ne nécessitent pas 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
À moins que votre application ne soit l'éditeur de mode de saisie (IME) par défaut ou qu'elle soit actuellement active, votre application 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 une version ultérieure, elle ne peut pas lire le numéro de série tant que l'utilisateur n'a pas autorisé votre application à accéder à l'appareil ou à l'accessoire USB.
Pour en savoir plus sur l'utilisation des périphériques USB, consultez le guide sur la configuration des hôtes USB.
Caméra et connectivité
Cette section liste 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 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 incluses dans la valeur renvoyée par cette méthode.
Pour en savoir plus sur ces modifications, consultez la section concernant 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 outils de contrôle des règles relatives aux appareils (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'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 méthode
getConfiguredNetworks()
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 autres méthodes suivantes:
- Pour déclencher une connexion locale instantanée à un réseau Wi-Fi, utilisez
WifiNetworkSpecifier
dans un objetNetworkRequest
standard. - Pour ajouter des réseaux Wi-Fi afin de fournir un accès Internet à l'utilisateur, utilisez des objets
WifiNetworkSuggestion
. Vous pouvez ajouter et supprimer des réseaux qui s'affichent dans la boîte de dialogue de connexion automatique de sélection de réseau en appelant respectivementaddNetworkSuggestions()
etremoveNetworkSuggestions()
. 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 d'accéder à la position FINE.
Si votre application cible Android 10 ou version ultérieure, elle doit disposer de l'autorisation ACCESS_FINE_LOCATION
pour pouvoir utiliser plusieurs méthodes au sein des API Wi-Fi, Wi-Fi Aware ou Bluetooth. Les sections suivantes répertorient les classes et les méthodes concernées.
Téléphonie
TelephonyManager
getCellLocation()
getAllCellInfo()
requestNetworkScan()
requestCellInfoUpdate()
getAvailableNetworks()
getServiceState()
TelephonyScanManager
requestNetworkScan()
TelephonyScanManager.NetworkScanCallback
onResults()
PhoneStateListener
onCellLocationChanged()
onCellInfoChanged()
onServiceStateChanged()
Wi-Fi
WifiManager
startScan()
getScanResults()
getConnectionInfo()
getConfiguredNetworks()
WifiAwareManager
WifiP2pManager
WifiRttManager
Bluetooth
BluetoothAdapter
startDiscovery()
startLeScan()
BluetoothAdapter.LeScanCallback
BluetoothLeScanner
startScan()
Autorisations
Cette section décrit les modifications apportées au modèle d'autorisations Android.
Restriction d'accès 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 concernent que l'accès à la 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 de donner son autorisation.
Vérification des autorisations visibles par les utilisateurs dans les anciennes applications
Si votre application cible Android 5.1 (niveau d'API 22) ou une version antérieure, un écran d'autorisations s'affiche lorsqu'ils utilisent votre application sur un appareil exécutant Android 10 ou une version ultérieure pour la première fois, 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 au moment 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 (par exemple, la marche, le vélo ou les déplacements dans un véhicule). Cette fonctionnalité permet 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 la déclaration de cette autorisation sont les capteurs du compteur de pas et du détecteur de pas.
Si votre application cible Android 9 (niveau d'API 28) ou une version antérieure, le système lui accorde automatiquement l'autorisation android.permission.ACTIVITY_RECOGNITION
, si nécessaire, si elle 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 system-auto accorde l'autorisation android.permission.ACTIVITY_RECOGNITION
, votre application la conserve 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
À partir d'Android 10, les applications ne peuvent pas rechercher comment les autorisations sont regroupées dans l'interface utilisateur.