Android 11 offre aux développeurs de nouvelles fonctionnalités et API de qualité. Les sections ci-dessous vous présentent les nouvelles fonctionnalités disponibles pour vos application et leurs nouvelles API.
Pour obtenir une liste détaillée des nouvelles API, des API modifiées et supprimées, consultez le rapport de différences des API. Pour en savoir plus sur les nouvelles API, consultez la documentation de référence des API Android. Les nouvelles API sont mises en évidence. De plus, pour en savoir plus sur les domaines dans lesquels les changements de plate-forme peuvent affecter vos applications, consultez les modifications de comportement d'Android 11 pour les applications qui ciblent Android R et pour toutes les applications, ainsi que les modifications de la confidentialité.
Nouvelles expériences
Commandes de contrôle des appareils
Android 11 inclut une nouvelle API ControlsProviderService
que vous pouvez utiliser pour exposer des commandes pour les appareils externes connectés. Ces commandes apparaissent sous Commandes de contrôle des appareils dans le menu Marche/Arrêt d'Android. Pour en savoir plus, consultez Contrôler les appareils externes.
Commandes multimédias
Android 11 modifie l'affichage des commandes multimédias. Les commandes multimédias s'affichent à côté des réglages rapides. Les sessions provenant de plusieurs applications sont organisées dans un carrousel à faire glisser qui inclut des flux lus localement sur le téléphone, des flux distants, tels que ceux détectés sur des appareils externes ou des sessions de diffusion, et les sessions précédentes avec reprise, dans l'ordre de leur dernière lecture.
Les utilisateurs peuvent redémarrer les sessions précédentes à partir du carrousel sans avoir à démarrer l'application. Lorsque la lecture commence, l'utilisateur interagit avec les commandes multimédias de la manière habituelle.
Pour en savoir plus, consultez Commandes multimédias.
Écrans
Meilleure compatibilité avec les affichages en cascade
Android 11 fournit plusieurs API pour prendre en charge les écrans en cascade, qui s'encapsulent sur les bords de l'appareil. Ces écrans sont traités comme des variantes d'écrans dotés d'encoches. Les méthodes DisplayCutout
.getSafeInset…()
existantes renvoient désormais l'encart sécurisé pour éviter les chutes d'eau et les découpes.
Pour afficher le contenu de votre application dans la zone de la cascade, procédez comme suit:
Appelez
DisplayCutout.getWaterfallInsets()
pour obtenir les dimensions exactes de l'encart de la cascade d'annonces.Définissez l'attribut de mise en page de fenêtre
layoutInDisplayCutoutMode
surLAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
pour permettre à la fenêtre de s'étendre dans les zones de découpe et de cascade sur tous les bords de l'écran. Vous devez vous assurer qu'aucun contenu essentiel ne se trouve dans les encoches ou dans les cascades.
Capteur d'angle de charnière et appareils pliables
Android 11 permet aux applications exécutées sur les appareils dotés de configurations d'écran à charnière de déterminer l'angle de la charnière en fournissant un nouveau capteur avec TYPE_HINGE_ANGLE
et un nouveau SensorEvent
qui peut surveiller l'angle de charnière et fournir une mesure en degrés entre deux parties intégratives de l'appareil. Vous pouvez utiliser ces mesures brutes pour effectuer des animations précises lorsque l'utilisateur manipule l'appareil.
Consultez Appareils pliables.
Conversations
Amélioration des conversations
Android 11 apporte de nombreuses améliorations à la gestion des conversations. Les conversations sont des communications bidirectionnelles en temps réel entre deux personnes ou plus. Ces conversations sont mises en avant, et les utilisateurs disposent de plusieurs nouvelles options pour interagir avec elles.
Pour en savoir plus sur les conversations et sur la manière dont votre application peut les prendre en charge, consultez Contacts et conversations.
Bulles de chat
Les bulles sont désormais disponibles pour les développeurs afin d'aider à afficher les conversations dans le système. Les bulles étaient une fonctionnalité expérimentale d'Android 10 activée via une option pour les développeurs. Dans Android 11, cela n'est plus nécessaire.
Si une application cible Android 11 (niveau d'API 30) ou une version ultérieure, ses notifications ne sont pas présentées sous forme de bulles, sauf si elles répondent aux nouvelles exigences de conversation. Plus précisément, la notification doit être associée à un raccourci.
Avant Android 11, si vous vouliez qu'une notification s'affiche dans des bulles, vous deviez spécifier explicitement que la notification était configurée pour toujours se lancer en mode UI du document. À partir d'Android 11, vous n'avez plus besoin de définir explicitement ce paramètre. Si la notification apparaît sous forme d'info-bulle, la plate-forme la configure automatiquement pour qu'elle se lance automatiquement en mode UI du document.
Nous avons apporté un certain nombre d'améliorations aux performances des bulles, et les utilisateurs ont plus de flexibilité pour les activer et les désactiver dans chaque application. Pour les développeurs qui ont implémenté la compatibilité expérimentale, quelques modifications ont été apportées aux API dans Android 11:
- Le constructeur
BubbleMetadata.Builder()
sans paramètre est obsolète. Utilisez plutôt l'un des deux nouveaux constructeursBubbleMetadata.Builder(PendingIntent, Icon)
ouBubbleMetadata.Builder(String)
. - Créez
BubbleMetadata
à partir d'un ID de raccourci en appelantBubbleMetadata.Builder(String)
. La chaîne transmise doit correspondre à l'ID de raccourci fourni àNotification.Builder
. - Créez des icônes d'info-bulle avec
Icon.createWithContentUri()
ou avec la nouvelle méthodecreateWithAdaptiveBitmapContentUri()
.
Indicateurs visuels 5G
Pour en savoir plus sur l'affichage des indicateurs 5G sur les appareils des utilisateurs, consultez la section Informer vos utilisateurs lorsqu'ils sont connectés à la 5G.
Confidentialité
Android 11 introduit un grand nombre de modifications et de restrictions pour améliorer la confidentialité des utilisateurs. Pour en savoir plus, consultez la page Confidentialité.
Sécurité
Mises à jour de l'authentification biométrique
Pour vous aider à contrôler le niveau de sécurité des données de votre application, Android 11 apporte plusieurs améliorations à l'authentification biométrique. Ces modifications apparaissent également dans la bibliothèque Jetpack Biometric.
Types d'authentification
Android 11 introduit l'interface BiometricManager.Authenticators
, qui vous permet de déclarer les types d'authentification compatibles avec votre application.
Déterminer le type d'authentification utilisé
Une fois l'utilisateur authentifié, vous pouvez vérifier s'il a utilisé des identifiants d'appareil ou des identifiants biométriques en appelant getAuthenticationType()
.
Compatibilité supplémentaire avec les clés auth-per-use
Android 11 offre une meilleure prise en charge de l'authentification à l'aide de clés auth-per-use.
Méthodes obsolètes
Android 11 abandonne les méthodes suivantes:
- La méthode
setDeviceCredentialAllowed()
. - La méthode
setUserAuthenticationValidityDurationSeconds()
. - Version surchargée de
canAuthenticate()
qui n'accepte aucun argument.
Partage sécurisé d'ensembles de données volumineux
Dans certaines situations, par exemple celles impliquant le machine learning ou la lecture de contenus multimédias, votre application peut vouloir utiliser le même ensemble de données volumineux qu'une autre application. Dans les versions précédentes d'Android, votre application et une autre application devaient télécharger une copie distincte du même ensemble de données.
Pour réduire la redondance des données sur le réseau et sur le disque, Android 11 autorise la mise en cache de ces ensembles de données volumineux sur l'appareil à l'aide de blobs de données partagées. Pour en savoir plus sur le partage d'ensembles de données, consultez le guide détaillé sur le partage de grands ensembles de données.
Effectuer un chiffrement basé sur les fichiers sans identifiants utilisateur après un redémarrage OTA
Une fois que l'appareil a terminé une mise à jour OTA et a redémarré, les clés chiffrées par identifiants (CE) placées dans un espace de stockage protégé par des identifiants sont immédiatement disponibles pour les opérations de chiffrement basé sur les fichiers (FBE). Cela signifie qu'après une mise à jour OTA, votre application peut reprendre les opérations qui nécessitent les clés CE avant que l'utilisateur ne saisisse son code, son schéma ou son mot de passe.
Performances et qualité
Débogage sans fil
Android 11 permet de déployer et de déboguer votre application sans fil à partir de votre poste de travail via Android Debug Bridge (adb). Vous pouvez par exemple déployer votre application débogable sur plusieurs appareils distants sans connecter physiquement votre appareil via USB ni devoir faire face aux problèmes de connexion USB courants, tels que l'installation de pilotes. Pour en savoir plus, consultez Exécuter des applications sur un appareil.
Installation de l'APK incrémentiel ADB
L'installation d'APK volumineux (plus de 2 Go) sur un appareil peut prendre beaucoup de temps, même si seule une petite modification est apportée à une application. L'installation d'APK incrémentiel ADB (Android Debug Bridge) accélère ce processus en installant suffisamment de l'APK pour lancer l'application tout en diffusant les données restantes en arrière-plan. adb install
utilisera automatiquement cette fonctionnalité si elle est compatible avec l'appareil et si la dernière version de SDK Platform-Tools est installée. Si elle n'est pas prise en charge, la méthode d'installation par défaut est utilisée en mode silencieux.
Exécutez la commande adb suivante pour utiliser cette fonctionnalité. Si l'appareil n'est pas compatible avec l'installation incrémentielle, la commande échoue et affiche une explication détaillée.
adb install --incremental
Avant d'exécuter une installation incrémentielle d'APK ADB, vous devez signer votre APK et créer un fichier APK Signature Scheme v4. Le fichier de signature de la version 4 doit être placé à côté de l'APK pour que cette fonctionnalité fonctionne.
Détecter des erreurs à l'aide de l'outil d'allocation de mémoire natif
GWP-ASan est une fonctionnalité d'allocation de mémoire native qui permet de détecter les bugs d'utilisation après libération (use-after-free) et de dépassement de mémoire tampon de tas de mémoire (heap-buffer-overflow). Vous pouvez activer cette fonctionnalité de manière globale ou pour des sous-processus spécifiques de votre application. Pour en savoir plus, consultez le guide GWP-Asan.
API Neural Networks 1.3
Android 11 développe et améliore l'API Neural Networks (NNAPI).
Nouvelles opérations
NNAPI 1.3 introduit un nouveau type d'opérande, TENSOR_QUANT8_ASYMM_SIGNED
, pour prendre en charge le nouveau schéma de quantification de TensorFlow Lite.
De plus, NNAPI 1.3 introduit les nouvelles opérations suivantes:
QUANTIZED_LSTM
IF
WHILE
ELU
HARD_SWISH
FILL
RANK
Nouvelles commandes de ML
NNAPI 1.3 introduit de nouveaux contrôles pour assurer le bon fonctionnement du machine learning:
API QoS:la nouvelle API Quality of Service prend en charge la hiérarchisation et les échéances des tâches dans NNAPI avec les nouvelles fonctions suivantes:
Entrée/sortie du domaine de mémoire:NNAPI 1.3 est compatible avec les domaines de mémoire en tant qu'entrées et sorties pour l'exécution. Cela supprime les copies inutiles des mêmes données entre les différents composants du système, ce qui améliore les performances d'exécution des réseaux de neurones Android. Cette fonctionnalité ajoute un ensemble de nouvelles API NDK à utiliser avec des objets
ANeuralNetworksMemoryDesc
etANeuralNetworkMemory
, y compris les fonctions suivantes:ANeuralNetworksMemoryDesc_create()
ANeuralNetworksMemoryDesc_free()
ANeuralNetworksMemoryDesc_addInputRole()
ANeuralNetworksMemoryDesc_addOutputRole()
ANeuralNetworksMemoryDesc_setDimensions()
ANeuralNetworksMemoryDesc_finish()
ANeuralNetworksMemory_createFromDesc()
ANeuralNetworksMemory_copy()
Pour en savoir plus, consultez l'exemple de domaine de mémoire d'un réseau de neurones.
Compatibilité avec l'API de dépendance et les périmètres de synchronisation:NNAPI 1.3 est compatible avec le calcul asynchrone avec dépendances, ce qui permet de réduire considérablement les frais généraux lors de l'appel de modèles en chaîne. Cette fonctionnalité ajoute les nouvelles fonctions suivantes:
Flux de contrôle:NNAPI 1.3 est compatible avec le flux de contrôle général avec les nouvelles opérations de graphe
ANEURALNETWORKS_IF
etANEURALNETWORKS_WHILE
, qui acceptent d'autres modèles en tant qu'arguments à l'aide du nouveau type d'opérandeANEURALNETWORKS_MODEL
. De plus, cette fonctionnalité ajoute les nouvelles fonctions suivantes:
API NDK Thermal
Lorsque les appareils deviennent trop chauds, ils peuvent limiter le processeur et/ou le GPU, ce qui peut affecter les applications de manière inattendue. Les applications ou les jeux qui intègrent des graphismes complexes, des calculs complexes ou une activité réseau soutenue sont plus susceptibles de rencontrer des problèmes.
Utilisez l'API NDK Thermal sous Android 11 pour surveiller les changements de température sur l'appareil, puis prenez les mesures nécessaires pour réduire la consommation d'énergie et la température de l'appareil. Cette API est semblable à l'API Java Thermal. Vous pouvez l'utiliser pour recevoir des notifications en cas de changement d'état thermique ou pour interroger directement l'état actuel.
Texte et saisie
Amélioration des transitions IME
Android 11 introduit de nouvelles API afin d'améliorer les transitions pour les éditeurs de mode de saisie (IME), tels que les claviers à l'écran. Ces API facilitent l'ajustement du contenu de votre application en fonction de l'apparence et de la disparition de l'IME, ainsi qu'avec d'autres éléments tels que les barres d'état et de navigation.
Pour afficher un IME alors qu'une EditText
est ciblée, appelez view.getInsetsController().show(Type.ime())
.
Vous pouvez appeler cette méthode sur n'importe quelle vue de la même hiérarchie que le EditText
sélectionné. Vous n'avez pas besoin de l'appeler spécifiquement sur le EditText
. Pour masquer l'IME, appelez view.getInsetsController().hide(Type.ime())
.
Vous pouvez vérifier si un IME est actuellement visible en appelant view.getRootWindowInsets().isVisible(Type.ime())
.
Pour synchroniser les vues de votre application avec l'apparition et la disparition de l'IME, définissez un écouteur sur une vue en fournissant un WindowInsetsAnimation.Callback
à View.setWindowInsetsAnimationCallback()
.
(Vous pouvez définir cet écouteur sur n'importe quelle vue, il n'est pas nécessaire qu'il s'agisse d'un EditText
.) L'IME appelle la méthode onPrepare()
de votre écouteur, puis onStart()
au début de la transition. Il appelle ensuite onProgress()
à chaque progression de la transition. Une fois la transition terminée, l'IME appelle onEnd()
.
À tout moment de la transition, vous pouvez connaître l'avancement de la transition en appelant WindowInsetsAnimation.getFraction()
.
Pour obtenir un exemple d'utilisation de ces API, consultez le nouvel exemple de code WindowInsetsAnimation.
Contrôler l'animation de l'IME
Vous pouvez également prendre le contrôle de l'animation IME ou de l'animation d'une autre barre système, comme la barre de navigation. Pour ce faire, commencez par appeler setOnApplyWindowInsetsListener()
afin de définir un nouvel écouteur pour les modifications d'encart de fenêtre:
Kotlin
rootView.setOnApplyWindowInsetsListener { rootView, windowInsets -> val barsIme = windowInsets.getInsets(Type.systemBars() or Type.ime()) rootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom) // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. WindowInsets.CONSUMED }
Java
mRoot.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() { @Override public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) { Insets barsIME = insets.getInsets(Type.systemBars() | Type.ime()); mRootView.setPadding(barsIme.left, barsIme.top, barsIme.right, barsIme.bottom); // We return the new WindowInsets.CONSUMED to stop the insets being // dispatched any further into the view hierarchy. This replaces the // deprecated WindowInsets.consumeSystemWindowInsets() and related // functions. return WindowInsets.CONSUMED; } });
Pour déplacer l'IME ou une autre barre système, appelez la méthode controlWindowInsetsAnimation()
du contrôleur:
Kotlin
view.windowInsetsController.controlWindowInsetsAnimation( Type.ime(), 1000, LinearInterpolator(), cancellationSignal, object : WindowInsetsAnimationControlListener() { fun onReady(controller: WindowInsetsAnimationController, types: Int) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */) } } );
Java
mRoot.getWindowInsetsController().controlWindowInsetsAnimation( Type.ime(), 1000, new LinearInterpolator(), cancellationSignal, new WindowInsetsAnimationControlListener() { @Override public void onReady( @NonNull WindowInsetsAnimationController controller, int types ) { // update IME inset controller.setInsetsAndAlpha(Insets.of(0, 0, 0, inset), 1f /* alpha */, 0.1 /* fraction progress */); } @Override public void onCancelled() {} });
Mises à jour des bibliothèques ICU
Android 11 met à jour le package android.icu
pour utiliser la version 66 de la bibliothèque ICU, au lieu de la version 63 sous Android 10. La nouvelle version de la bibliothèque inclut des données sur les paramètres régionaux CLDR mis à jour et un certain nombre d'améliorations apportées à la prise en charge de l'internationalisation sous Android.
Voici les modifications notables apportées aux nouvelles versions de la bibliothèque:
- De nombreuses API de mise en forme acceptent désormais un nouveau type d'objet renvoyé qui étend
FormattedValue
. - L'API
LocaleMatcher
est améliorée avec une classe de compilateur, la prise en charge du typejava.util.Locale
et une classe de résultat contenant des données supplémentaires sur une correspondance. - Unicode 13 est désormais compatible.
Contenus multimédias
Allouer des tampons MediaCodec
Android 11 inclut de nouvelles API MediaCodec
qui donnent aux applications plus de contrôle lors de l'allocation des tampons d'entrée et de sortie. Cela permet à votre application de gérer la mémoire plus efficacement.
Nouveaux cours:
Nouvelles méthodes:
MediaCodec.getQueueRequest()
MediaCodec.getOutputFrame()
MediaCodec.LinearBlock.isCodecCopyFreeCompatible()
En outre, le comportement de deux méthodes dans MediaCodec.Callback()
a changé:
onInputBufferAvailable()
- Au lieu d'appeler
MediaCodec.getInputBuffer()
etMediaCodec.queueInputBuffer()
avec l'index, si elles sont configurées pour utiliser l'API Block Model, les applications doivent utiliserMediaCodec.getQueueRequest
avec l'index, en associant un LinearBlock/HardwareBuffer à l'emplacement. onOutputBufferAvailable()
- Au lieu d'appeler
MediaCodec.getOutputBuffer()
avec l'index, les applications peuvent utiliserMediaCodec.getOutputFrame()
avec l'index pour obtenir l'objetOutputFrame
avec plus d'informations et les tampons LinearBlock/HardwareBuffer.
Décodage à faible latence dans MediaCodec
Android 11 améliore MediaCodec
afin de permettre le décodage à faible latence des jeux et d'autres applications en temps réel. Vous pouvez vérifier si un codec est compatible avec le décodage à faible latence en transmettant FEATURE_LowLatency
à MediaCodecInfo.CodecCapabilities.isFeatureSupported()
.
Pour activer ou désactiver le décodage à faible latence, procédez de l'une des façons suivantes:
- Définissez la nouvelle clé
KEY_LOW_LATENCY
sur 0 ou 1 à l'aide deMediaCodec.configure()
. - Définissez la nouvelle clé de paramètre
PARAMETER_KEY_LOW_LATENCY
sur 0 ou 1 à l'aide deMediaCodec.setParameters()
.
Nouvelle fonction AAudio AAudioStream_release()
La fonction AAudioStream_close()
libère et ferme un flux audio en même temps. Cela peut être dangereux. Si un autre processus tente d'accéder au flux après sa fermeture, le processus plante.
La nouvelle fonction AAudioStream_release()
libère le flux, mais ne le ferme pas. Cela libère ses ressources et laisse le flux dans un état connu. L'objet persiste jusqu'à ce que vous appelez AAudioStream_close()
.
API MediaParser
MediaParser est une nouvelle API de bas niveau pour l'extraction de contenus multimédias. Il est plus flexible que MediaExtractor et offre un contrôle supplémentaire sur la fonctionnalité d'extraction multimédia.
Capture audio à partir d'un périphérique USB
Lorsqu'une application sans autorisation RECORD_AUDIO
utilise UsbManager
pour demander un accès direct à un appareil audio USB doté d'une fonctionnalité de capture audio (tel qu'un casque USB), un nouveau message d'avertissement s'affiche, demandant à l'utilisateur de confirmer l'autorisation d'utiliser l'appareil. Le système ignore toutes les options "always use" (toujours utiliser). L'utilisateur doit donc confirmer l'avertissement et accorder l'autorisation chaque fois qu'une application demande l'accès.
Pour éviter ce comportement, votre application doit demander l'autorisation RECORD_AUDIO
.
Accès simultané au micro
Android 11 ajoute de nouvelles méthodes aux API AudioRecord
, MediaRecorder
et AAudioStream
. Ces méthodes activent et désactivent la possibilité de capturer simultanément, quel que soit le cas d'utilisation sélectionné. Consultez la section Partager l'entrée audio.
Sélecteur de sortie
Android 11 implémente un nouveau comportement pour les applications qui utilisent les API Cast et MediaRouter.
En plus d'accéder aux options de diffusion depuis une application, les options de changement apparaissent également dans le lecteur multimédia du système. Cela permet d'offrir à l'utilisateur un parcours fluide lorsqu'il passe d'un appareil à l'autre, car il change de contexte de visionnage et d'écoute (par exemple, pour regarder une vidéo dans la cuisine ou sur un téléphone, ou pour écouter du contenu audio à la maison ou en voiture). Reportez-vous au sélecteur de sortie.
Connectivité
Améliorations apportées au point d'accès Wi-Fi
Pour en savoir plus sur les fonctionnalités Passpoint ajoutées à Android 11, consultez Passpoint.
L'API Wi-Fi Suggestion est étendue
Android 11 développe l'API Wi-Fi Suggestion afin d'améliorer les fonctionnalités de gestion de réseau de votre application, y compris les suivantes:
- Les applications de gestion de la connectivité peuvent gérer leurs propres réseaux en autorisant les requêtes de déconnexion.
- Les réseaux Passpoint sont intégrés à l'API Suggestion et peuvent être suggérés à l'utilisateur.
- Les API Analytics vous permettent d'obtenir des informations sur la qualité de vos réseaux.
Informations CallScreeningService
À partir d'Android 11, un CallScreeningService peut demander des informations sur l'état de validation STIR/SHAKEN (verstat) pour les appels entrants. Ces informations sont fournies dans les détails des appels entrants.
Si un CallScreeningService
détient l'autorisation READ_CONTACTS
, l'application est avertie lorsqu'il y a des appels entrants ou sortants vers un numéro figurant dans les contacts de l'utilisateur.
Pour en savoir plus, consultez Empêcher le spoofing du numéro de l'appelant.
Ouvrir les mises à jour de l'API Mobile
Pour en savoir plus sur la prise en charge d'OMAPI sur Android 11 ou version ultérieure, consultez Compatibilité des lecteurs de l'API Open Mobile.
VPN performants
Les applications qui ciblent le niveau d'API 30 ou supérieur, ou qui s'exécutent sur des appareils lancés à partir du niveau d'API 29, peuvent appliquer IKEv2/IPsec aux VPN, qu'ils soient configurés par l'utilisateur ou basés sur des applications.
Les VPN s'exécutent en mode natif dans le système d'exploitation, ce qui simplifie le code requis pour établir des connexions VPN IKEv2/IPsec dans une application.
Contrôle de l'accès au réseau par processus
Pour en savoir plus sur l'activation de l'accès réseau par processus, consultez la page Gérer l'utilisation du réseau.
Autoriser plusieurs configurations Passpoint installées avec le même nom de domaine complet
À partir d'Android 11, vous pouvez utiliser PasspointConfiguration.getUniqueId()
pour obtenir un identifiant unique pour un objet PasspointConfiguration
, ce qui permet aux utilisateurs de votre application d'installer plusieurs profils avec le même nom de domaine complet.
Cette fonctionnalité est utile lorsqu'un opérateur déploie plusieurs combinaisons de code de pays mobile (MCC) et de code de réseau mobile (MNC) sur son réseau, mais qu'il ne dispose que d'un seul nom de domaine complet. Sur Android 11 et versions ultérieures, il est possible d'installer plusieurs profils avec le même nom de domaine complet correspondant au réseau que le fournisseur Home lorsque l'utilisateur installe une carte SIM avec un CM ou un MNC.
Compatibilité avec l'antenne GNSS
Android 11 introduit la classe GnssAntennaInfo
, qui permet à votre application d'utiliser davantage le positionnement centimètre de précision que le système de navigation satellite (GNSS, Global Navigation Satellite System) peut fournir.
Pour en savoir plus, consultez le guide Informations sur l'étalonnage de l'antenne.
Graphismes
Décodeur d'image NDK
L'API ImageDecoder
du NDK fournit une API standard pour les applications C/C++ Android permettant de décoder directement les images. Les développeurs d'applications n'ont plus besoin d'utiliser les API du framework (via JNI) ni de regrouper des bibliothèques de décodage d'images tierces. Pour en savoir plus, consultez le Guide du développeur pour les décodeurs d'images.
API Frame rate
Android 11 fournit une API qui permet aux applications d'informer le système de leur fréquence d'images prévue, afin de réduire la gêne sur les appareils compatibles avec plusieurs fréquences d'actualisation. Pour en savoir plus sur l'utilisation de cette API, consultez le guide de la fréquence d'images.
Demander et vérifier une assistance à faible latence
Certains écrans, comme certains écrans externes et téléviseurs, peuvent effectuer le post-traitement graphique. Ce post-traitement améliore les graphiques, mais peut augmenter la latence. Les écrans plus récents compatibles avec HDMI 2.1 disposent d'un mode à faible latence automatique (ALLM, également appelé mode jeu), qui réduit la latence en désactivant ce post-traitement. Pour en savoir plus sur ALLM, reportez-vous à la spécification HDMI 2.1.
Une fenêtre peut demander l'utilisation du mode automatique à faible latence, s'il est disponible. ALLM est particulièrement utile pour les applications telles que les jeux et la visioconférence, pour lesquelles une faible latence est plus importante que la qualité des graphismes.
Pour activer ou désactiver le post-traitement minimal, appelez Window.setPreferMinimalPostProcessing()
ou définissez l'attribut preferMinimalPostProcessing
de la fenêtre sur true
. Tous les écrans n'acceptent pas le post-traitement minimal. Pour savoir si un écran particulier le permet, appelez la nouvelle méthode Display.isMinimalPostProcessingSupported()
.
Injection performante de la couche de débogage graphique
Les applications peuvent désormais charger des couches graphiques externes (GLES, Vulkan) dans le code d'application native pour exposer les mêmes fonctionnalités qu'une application débogable, mais sans encourir de coûts de performances. Cette fonctionnalité est particulièrement importante lorsque vous profilez votre application avec des outils tels que GAPID. Pour profiler votre application, incluez l'élément Meta-data suivant dans le fichier manifeste de votre application au lieu de rendre l'application débogable:
<application ... > <meta-data android:name="com.android.graphics.injectLayers.enable" android:value="true" /> </application>
Images et appareil photo
Couper le son et le vibreur des notifications pendant la capture active
À partir d'Android 11, lorsque vous utilisez activement l'appareil photo, votre application peut uniquement couper le son des vibrations, des sons et des vibrations, ou aucune des deux à l'aide de setCameraAudioRestriction()
.
Compatibilité étendue de l'appareil photo dans Android Emulator
Pour en savoir plus sur la prise en charge étendue des appareils photo dans l'émulateur à partir d'Android 11, consultez la section Compatibilité avec les appareils photo.
Compatibilité avec l'utilisation simultanée de plusieurs caméras
Android 11 ajoute des API pour prendre en charge l'utilisation de plusieurs appareils photo à la fois, y compris une caméra frontale et une caméra arrière.
Pour vérifier la prise en charge de l'appareil sur lequel votre application s'exécute, utilisez les méthodes suivantes:
getConcurrentCameraIds()
renvoie unSet
de combinaisons d'ID d'appareils photo pouvant diffuser simultanément avec des combinaisons de flux garantis lorsqu'elles sont configurées par le même processus d'application.isConcurrentSessionConfigurationSupported()
demande si les appareils photo sont compatibles simultanément avec les configurations de session correspondantes.
Meilleure prise en charge des images HEIF avec plusieurs cadres
À partir d'Android 11, si vous appelez ImageDecoder.decodeDrawable()
et transmettez une image HEIF contenant une séquence d'images (telle qu'une animation ou une photo en rafale), la méthode renvoie un AnimatedImageDrawable
contenant la séquence d'images complète. Dans les versions antérieures d'Android, la méthode renvoyait un BitmapDrawable
d'un seul frame.
Si le graphique HEIF contient plusieurs images qui ne sont pas dans une séquence, vous pouvez récupérer une image individuelle en appelant MediaMetadataRetriever.getImageAtIndex()
.
Accessibilité
Mises à jour pour les développeurs de services d'accessibilité
Si vous créez un service d'accessibilité personnalisé, vous pouvez utiliser les fonctionnalités suivantes sous Android 11:
- L'explication d'un service d'accessibilité destinée aux utilisateurs permet désormais d'utiliser du code HTML et des images en plus du texte brut. Cette flexibilité leur permet d'expliquer plus facilement aux utilisateurs finaux ce que fait votre service et comment il peut les aider.
- Pour utiliser une description de l'état d'un élément d'interface utilisateur qui est plus significative d'un point de vue sémantique que
contentDescription
, appelez la méthodegetStateDescription()
. - Pour demander que les événements tactiles contournent l'explorateur tactile du système, appelez
setTouchExplorationPassthroughRegion()
. De même, pour demander que les gestes contournent le détecteur de gestes du système, appelezsetGestureDetectionPassthroughRegion()
. - Vous pouvez demander des actions IME, telles que "Entrée" et "Suivant", ainsi que des captures d'écran de fenêtres qui n'activent pas l'indicateur
FLAG_SECURE
.
Autres fonctionnalités
Motifs de fermeture du processus de l'application
Android 11 introduit la méthode ActivityManager.getHistoricalProcessExitReasons()
, qui indique les motifs de tout arrêt récent de processus. Les applications peuvent utiliser cette méthode pour recueillir des informations de diagnostic de plantage, par exemple pour déterminer si l'arrêt d'un processus est dû à des erreurs ANR, à des problèmes de mémoire ou à d'autres raisons.
De plus, vous pouvez utiliser la nouvelle méthode setProcessStateSummary()
pour stocker des informations d'état personnalisées en vue d'une analyse ultérieure.
La méthode getHistoricalProcessExitReasons()
renvoie les instances de la classe ApplicationExitInfo
, qui contient des informations liées à l'arrêt d'un processus d'application. En appelant getReason()
sur une instance de cette classe, vous pouvez déterminer pourquoi le processus de votre application a été arrêté. Par exemple, une valeur renvoyée de REASON_CRASH
indique qu'une exception non gérée s'est produite dans votre application. Si votre application doit garantir l'unicité des événements de sortie, elle peut conserver un identifiant spécifique à l'application, tel qu'une valeur de hachage basée sur l'horodatage de la méthode getTimestamp()
.
Ressources supplémentaires
Pour en savoir plus, consultez l'article sur les nouveaux outils Android 11 permettant de rendre les applications plus privées et stables sur Medium.
Chargeurs de ressources
Android 11 introduit une nouvelle API qui permet aux applications d'étendre de manière dynamique la recherche et le chargement des ressources. Les nouvelles classes d'API ResourcesLoader
et ResourcesProvider
sont principalement responsables de la fourniture des nouvelles fonctionnalités. Ensemble, ils permettent de fournir des ressources et des éléments supplémentaires, ou de modifier les valeurs de ressources et d'éléments existants.
Les objets ResourcesLoader
sont des conteneurs qui fournissent des objets ResourcesProvider
à l'instance Resources
d'une application. À leur tour, les objets ResourcesProvider
fournissent des méthodes pour charger des données de ressources à partir d'APK et de tables de ressources.
L'un des cas d'utilisation principaux de cette API est le chargement d'éléments personnalisés. Vous pouvez utiliser loadFromDirectory()
pour créer un ResourcesProvider
qui redirige la résolution des ressources et des éléments basés sur des fichiers. Ainsi, il recherche un répertoire spécifique plutôt que l'APK de l'application. Vous pouvez accéder à ces éléments via la famille de méthodes open()
de la classe d'API AssetManager
, comme pour les éléments regroupés dans l'APK.
Schéma de signature APK v4
Android 11 est compatible avec APK Signature Scheme v4. Ce schéma produit un nouveau type de signature dans un fichier distinct (apk-name.apk.idsig
), mais est semblable à ceux des versions 2 et 3. Aucune modification n'est apportée à l'APK. Ce schéma est compatible avec l'installation incrémentielle d'APK d'ADB, ce qui accélère l'installation de l'APK.
Filtres d'intent dynamiques
Pour recevoir des intents, une application doit déclarer, au moment de la compilation, les types de données qu'elle peut recevoir en définissant un filtre d'intent dans le fichier manifeste de l'application. Sous Android 10 et versions antérieures, les applications n'ont aucun moyen de modifier leurs filtres d'intent au moment de l'exécution. Ce problème est problématique pour les applications de virtualisation (telles que les machines virtuelles et les bureaux à distance), car elles n'ont aucun moyen de savoir exactement quel logiciel l'utilisateur y installera.
Android 11 introduit les groupes MIME, un nouvel élément de fichier manifeste qui permet à une application de déclarer un ensemble dynamique de types MIME dans un filtre d'intent et de le modifier de manière programmatique au moment de l'exécution. Pour utiliser un groupe MIME, incluez un élément de données dans le fichier manifeste de votre application avec le nouvel attribut android:mimeGroup
:
<intent-filter> <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeGroup="myMimeGroup"/> </intent-filter>
La valeur de l'attribut android:mimeGroup
est un ID de chaîne arbitraire qui identifie le groupe MIME au moment de l'exécution. Vous pouvez accéder au contenu d'un groupe MIME et le mettre à jour en transmettant son ID aux nouvelles méthodes suivantes de la classe d'API PackageManager
:
Lorsque vous ajoutez un type MIME à un groupe MIME de manière automatisée, il fonctionne exactement de la même manière qu'un type MIME statique déclaré explicitement dans le fichier manifeste.
Améliorations apportées à la saisie automatique
Android 11 introduit des améliorations pour les services de saisie automatique.
Identifiants d'indication dans AssistStructure.ViewNode
Il est souvent utile pour les services de saisie automatique de calculer un hachage de signature pour un affichage en fonction de ses propriétés. L'indice de vue est particulièrement utile lors du calcul d'un hachage de signature, mais sa chaîne peut changer en fonction des paramètres régionaux du téléphone. Pour résoudre ce problème, Android 11 développe AssistStructure.ViewNode
avec une nouvelle méthode getHintIdEntry()
, qui renvoie l'identifiant de ressource pour les indications d'une vue. Cette méthode fournit une valeur indépendante des paramètres régionaux que vous pouvez utiliser pour calculer les hachages de signature.
Événements affichés dans les ensembles de données
Pour aider les services de saisie automatique à améliorer leurs suggestions, Android 11 permet d'identifier les cas où un service de saisie automatique a présenté des ensembles de données, mais que l'utilisateur n'en a sélectionné aucun. Dans Android 11, FillEventHistory
signale un nouveau type d'événement TYPE_DATASETS_SHOWN
. FillEventHistory
enregistre un événement de ce type chaque fois que le service de saisie automatique présente un ou plusieurs ensembles de données à l'utilisateur. Les services de saisie automatique peuvent utiliser ces événements conjointement avec l'événement TYPE_DATASET_SELECTED
existant pour déterminer si l'utilisateur a sélectionné l'une des options de saisie automatique fournies.
Intégration IME
Les claviers et autres IME peuvent désormais afficher des suggestions de saisie automatique de manière intégrée, dans une bande de suggestions ou une interface similaire, au lieu d'un menu déroulant. Pour protéger les informations sensibles telles que les mots de passe et les numéros de carte de crédit, les suggestions sont affichées à l'utilisateur, mais ne sont pas connues de l'IME tant que l'utilisateur n'en a pas sélectionné une. Pour en savoir plus sur la compatibilité des IME et des gestionnaires de mots de passe avec cette fonctionnalité, consultez Intégrer la saisie automatique aux claviers.
Partage de données avec le service de capture de contenu
À partir d'Android 11, votre application peut partager des données avec le service de capture de contenu de l'appareil. Cette fonctionnalité permet à un appareil de fournir plus facilement des informations contextuelles, telles que l'affichage du nom d'une chanson en cours de lecture dans l'environnement de l'utilisateur.
Pour rendre les données de votre application disponibles pour le service de capture de contenu, appelez la méthode shareData()
sur une instance de ContentCaptureManager
. Si le système accepte la requête de partage de données, votre application reçoit un descripteur de fichier en écriture seule à partager avec le service de capture de contenu.