Android 9 (niveau d'API 28) offre de nouvelles fonctionnalités et fonctionnalités de qualité aux utilisateurs et aux développeurs. Ce document présente les nouveautés pour les développeurs.
Pour en savoir plus sur les nouvelles API, consultez le rapport de différences des API ou la documentation de référence de l'API Android. Pensez également à consulter Changements de comportement d'Android 9 pour en savoir plus sur les domaines où les changements de plate-forme peuvent affecter vos applications.
Positionnement en intérieur avec RTT Wi-Fi

Android 9 est désormais compatible avec la plate-forme pour le Wi-Fi IEEE 802.11-2016 ou Wi-Fi Round-Trip-Time (RTT), pour vous permettre du positionnement à l'intérieur de vos applications.
Sur les appareils équipés d'Android 9 avec prise en charge matérielle, vos applications peuvent utiliser le
les API DAR pour mesurer
la distance des points d'accès (PA) Wi-Fi compatibles avec le texte en temps réel à proximité ; Les services de localisation et la recherche Wi-Fi doivent être activés sur l'appareil (sous Paramètres > Position). Votre application doit également disposer de l'autorisation ACCESS_FINE_LOCATION
. L'appareil n'a pas besoin de se connecter aux points d'accès pour utiliser le texte en temps réel.
Pour préserver la confidentialité, seul le téléphone peut déterminer la distance au point d'accès. Les points d'accès ne disposent pas de ces informations.
Si votre appareil mesure la distance à trois points d'accès ou plus, vous pouvez utiliser un algorithme de multilatération pour estimer la position de l'appareil qui correspond le mieux à ces mesures. Le résultat est généralement précis à 1 à 2 mètres près.
Avec cette précision, vous pouvez créer de nouvelles expériences, comme la navigation dans le bâtiment et des services basés sur la localisation ultraprécis, comme le contrôle vocal clarifié (par exemple, "Allume cette lumière") et des informations basées sur votre position (comme "Existe-t-il des offres spéciales pour ce produit ?").
Pour savoir quelle API de DAR Wi-Fi est utilisée, consultez les Application de démonstration Android WifiRttScan
Pour en savoir plus, consultez la section Détection de la position via le Wi-Fi : mesure de la distance avec le RTT.
Compatibilité avec l'encoche

Tester la découpe de l'écran à l'aide de l'émulateur
Android 9 est compatible avec les derniers écrans bord à bord
qui contiennent des encoches pour
écrans pour caméras et haut-parleurs. La
DisplayCutout
permet de déterminer l'emplacement et la forme des zones non fonctionnelles
le contenu ne doit pas s'afficher. Pour déterminer l'existence et le placement
ces zones d'encoche, utilisez la
getDisplayCutout()
.
Un nouvel attribut de mise en page de fenêtre, layoutInDisplayCutoutMode
, permet à votre application de mettre en page son contenu autour des découpes d'un appareil. Vous pouvez définir cet attribut sur l'une des valeurs suivantes :
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
Vous pouvez simuler une découpe d'écran sur n'importe quel appareil ou émulateur sous Android 9. comme suit:
- Activez les options pour les développeurs.
- Sur l'écran Options pour les développeurs, faites défiler l'écran jusqu'à la section Drawing (Dessin) et sélectionnez Simulate a display with a cutout (Simuler un écran avec une encoche).
- Sélectionnez la taille de la découpe.
Notifications
Android 9 propose plusieurs améliorations des notifications, qui sont toutes disponibles pour les développeurs ciblant le niveau d'API 28 ou supérieur.

MessagingStyle avec une photo en pièce jointe.

MessagingStyle avec réponses et conversation.
Pour obtenir un exemple de code qui utilise des notifications, y compris les fonctionnalités d'Android 9, consultez l'exemple People.
Expérience de messagerie améliorée
À partir d'Android 7.0 (niveau d'API 24), vous pouvez ajouter une action permettant de répondre aux messages ou de saisir un autre texte directement depuis une notification. Amélioration d'Android 9 cette fonctionnalité, avec les améliorations suivantes:
Prise en charge simplifiée des participants à la conversation : la classe
Person
permet d'identifier les personnes impliquées dans une conversation, y compris leurs avatars et leurs URI. De nombreuses autres API, telles queaddMessage()
, utilisent désormais la classePerson
au lieu d'unCharSequence
. La classePerson
est également compatible avec le modèle de conception Builder.Compatibilité avec les images : Android 9 affiche désormais des images dans les notifications de messagerie sur les téléphones. Vous pouvez utiliser
setData()
sur le message pour afficher une image. L'extrait de code suivant montre comment pour créer unPerson
et un message contenant une image.
Kotlin
// Create new Person. val sender = Person() .setName(name) .setUri(uri) .setIcon(null) .build() // Create image message. val message = Message("Picture", time, sender) .setData("image/", imageUri) val style = Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message)
Java
// Create new Person. Person sender = new Person() .setName(name) .setUri(uri) .setIcon(null) .build(); // Create image message. Message message = new Message("Picture", time, sender) .setData("image/", imageUri); Notification.MessagingStyle style = new Notification.MessagingStyle(getUser()) .addMessage("Check this out!", 0, sender) .addMessage(message);
Enregistrer les réponses en tant que brouillons : votre application peut récupérer le
EXTRA_REMOTE_INPUT_DRAFT
envoyé par le système lorsqu'un utilisateur ferme par inadvertance une notification de messagerie. Vous pouvez utiliser cet extra pour préremplir les champs de texte de l'application afin que les utilisateurs puissent terminer leur réponse.Identifier si une conversation est une conversation de groupe : vous pouvez utiliser
setGroupConversation()
pour identifier intentionnellement une conversation comme étant une conversation de groupe ou non.Définissez l'action sémantique d'un intent : la méthode
setSemanticAction()
vous permet d'attribuer une signification sémantique à une action, comme "marquer comme lu", "supprimer", "répondre", etc.Réponse suggérée : Android 9 est compatible avec les mêmes réponses suggérées disponibles dans votre application de chat. Utilisez
RemoteInput.setChoices()
pour fournir un éventail de réponses standards à l'utilisateur.
Paramètres de la chaîne, diffusions et Ne pas déranger
Les canaux de notification ont été introduits dans Android 8.0. ce qui vous permet de créer et personnalisable pour chaque type de notification que vous souhaitez afficher. Android 9 simplifie les paramètres des canaux de notification avec les modifications suivantes :
Blocage de groupes de chaînes: les utilisateurs peuvent désormais bloquer des groupes entiers de chaînes dans les paramètres de notification d'une application. Vous pouvez utiliser
isBlocked()
permettant d'identifier quand un groupe est bloqué et, par conséquent, de n'envoyer des notifications pour les chaînes de ce groupe.De plus, votre application peut interroger les paramètres actuels du groupe de canaux à l'aide de la nouvelle méthode
getNotificationChannelGroup()
.Nouveaux types d'intents de diffusion: le système Android envoie désormais des intents de diffusion lorsque l'état de blocage des canaux de notification et des groupes de canaux change. L'application propriétaire de la chaîne ou du groupe bloqués peut écouter ces intents et réagir en conséquence. Pour en savoir plus sur ces extras et actions d'intent, reportez-vous à la liste des constantes mise à jour
NotificationManager
référence. Pour en savoir plus sur la réaction aux intents de diffusion, consultez la section Diffusions.NotificationManager.Policy
propose trois nouvelles catégories de priorité pour le mode Ne pas déranger :PRIORITY_CATEGORY_ALARMS
donne la priorité aux alarmes.PRIORITY_CATEGORY_MEDIA
donne la priorité aux sons provenant de sources multimédias, comme les contenus multimédias et la navigation vocale.PRIORITY_CATEGORY_SYSTEM
donne la priorité aux sons du système.
NotificationManager.Policy
dispose également de sept nouvelles constantes "Ne pas déranger" pour supprimer les interruptions visuelles:SUPPRESSED_EFFECT_FULL_SCREEN_INTENT
empêche la notification de lancer l'activité en plein écran.SUPPRESSED_EFFECT_LIGHTS
bloque les voyants de notification.SUPPRESSED_EFFECT_PEEK
empêche les notifications de s'afficher brièvement (appelé "peeking").SUPPRESSED_EFFECT_STATUS_BAR
empêche les notifications d'apparaître dans la barre d'état sur les appareils compatibles avec les barres d'état.SUPPRESSED_EFFECT_BADGE
bloque les badges sur les appareils compatibles avec les badges. Pour en savoir plus, consultez la section Modifier un badge de notification.SUPPRESSED_EFFECT_AMBIENT
bloque les notifications sur les appareils compatibles avec l'affichage en mode Veille.SUPPRESSED_EFFECT_NOTIFICATION_LIST
empêche les notifications d'apparaître dans la vue Liste sur les appareils compatibles avec cette vue, comme le volet des notifications ou l'écran de verrouillage.
Compatibilité multi-caméra et mises à jour de la caméra
Sur les appareils équipés d'Android 9, vous pouvez accéder aux flux simultanément depuis deux ou plusieurs caméras. Sur les appareils équipés de deux caméras avant ou de deux caméras arrière, vous pouvez créer des fonctionnalités innovantes qui ne sont pas possibles avec une seule caméra, comme le zoom fluide, l'effet bokeh et la vision stéréo. L'API vous permet également d'appeler un flux de caméra logique ou fusionné qui bascule automatiquement entre deux caméras ou plus.
D'autres améliorations de l'appareil photo incluent des paramètres de session supplémentaires qui aident à réduire les délais lors de la capture initiale, et le partage de surface qui permet aux clients de l'appareil photo de gérer divers cas d'utilisation sans avoir à arrêter et à démarrer le streaming de l'appareil photo. Nous avons également ajouté des API pour la prise en charge du flash basée sur l'écran et l'accès aux codes temporels OIS pour la stabilisation de l'image et les effets spéciaux au niveau de l'application.
Sous Android 9, l'API multicaméra est compatible avec les appareils monochromes dotés de la fonctionnalité FULL
ou LIMITED
.
La sortie monochrome est obtenue via le format YUV_420_888
avec Y en niveaux de gris, U (Cb) à 128 et V (Cr) à 128.
Android 9 est également compatible avec les ports USB/UVC externes. caméras activées appareils compatibles.
ImageDecoder pour les drawables et les bitmaps
Android 9 introduit le
ImageDecoder
, qui offre une approche modernisée du décodage des images. Utilisez cette classe au lieu des API BitmapFactory
et BitmapFactory.Options
.
ImageDecoder
vous permet de créer un Drawable
ou un Bitmap
à partir d'un tampon d'octets, d'un fichier ou d'un URI. Pour décoder une image, vous devez d'abord
createSource()
avec la source de l'image encodée. Appelez ensuite
decodeDrawable()
ou decodeBitmap()
en transmettant ImageDecoder.Source
pour créer un objet Drawable
ou Bitmap
. Pour modifier les paramètres par défaut, transmettez OnHeaderDecodedListener
à decodeDrawable()
ou decodeBitmap()
. ImageDecoder
appels
onHeaderDecoded()
avec la largeur et la hauteur par défaut de l'image, une fois qu'elles sont connues.
Si l'image encodée est un GIF animé ou un WebP, decodeDrawable()
renvoie une
Drawable
, qui est une instance de
AnimatedImageDrawable
.
Il existe différentes méthodes pour définir les propriétés de l'image:
- Pour redimensionner l'image décodée à une taille exacte, transmettez les dimensions cibles à
setTargetSize()
. Vous pouvez également redimensionner des images à l'aide d'une taille d'échantillon. Transmettez la taille d'échantillon directement àsetTargetSampleSize()
- Pour recadrer une image dans la plage de l'image mise à l'échelle, appelez
setCrop()
. - Pour créer un bitmap modifiable, transmettez
true
àsetMutableRequired()
.
ImageDecoder
vous permet également d'ajouter des effets personnalisés et complexes à une image, tels que des angles arrondis ou des masques circulaires. Utilisez setPostProcessor()
avec une instance de la classe PostProcessor
pour exécuter les commandes de dessin de votre choix.
Animation
Android 9 introduit la classe AnimatedImageDrawable
pour dessiner et afficher des images animées GIF et WebP.
AnimatedImageDrawable
fonctionne de manière semblable à AnimatedVectorDrawable
, car le thread de rendu gère les animations de AnimatedImageDrawable
.
Le thread de rendu utilise également un thread de travail pour le décodage, de sorte que le décodage n'interfère pas avec d'autres opérations sur le thread de rendu. Cette implémentation permet à votre application d'afficher une image animée sans gérer ses mises à jour ni interférer avec d'autres événements sur le thread d'UI de votre application.
Un AnimatedImageDrawable
peut être décodé à l'aide d'une instance de ImageDecoder
. L'extrait de code suivant montre comment utiliser ImageDecoder
pour décoder votre AnimatedImageDrawable
:
Kotlin
@Throws(IOException::class) private fun decodeImage() { val decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(resources, R.drawable.my_drawable)) // Prior to start(), the first frame is displayed. (decodedAnimation as? AnimatedImageDrawable)?.start() }
Java
private void decodeImage() throws IOException { Drawable decodedAnimation = ImageDecoder.decodeDrawable( ImageDecoder.createSource(getResources(), R.drawable.my_drawable)); if (decodedAnimation instanceof AnimatedImageDrawable) { // Prior to start(), the first frame is displayed. ((AnimatedImageDrawable) decodedAnimation).start(); } }
ImageDecoder
propose plusieurs méthodes qui vous permettent de modifier davantage l'image.
Par exemple, vous pouvez utiliser la méthode
setPostProcessor()
pour modifier l'apparence de l'image, par exemple en appliquant un masque circulaire ou
et des angles arrondis.
Vidéo HDR VP9, compression d'images HEIF et API Media
Android 9 est compatible avec le VP9 Profile 2 High Dynamic Range (HDR) afin de proposer à vos utilisateurs des films compatibles HDR depuis YouTube, Play Films et d'autres sources sur des appareils compatibles HDR.
Android 9 prend également en charge l'encodage d'images à l'aide du format High Efficiency Image File (HEIF ou HEIC), qui améliore la compression et réduit l'espace de stockage et l'utilisation des données réseau. Les exemples d'images fixes HEIF sont compatibles avec les classes MediaMuxer
et MediaExtractor
. Grâce à la prise en charge de la plate-forme sur les appareils Android 9, il est facile d'envoyer et
des images HEIF de votre serveur backend. Une fois que vous vous êtes assuré que votre application est compatible avec ce format de données pour le partage et l'affichage, essayez HEIF comme format de stockage d'images dans votre application. Vous pouvez effectuer une conversion JPEG-HEIC à l'aide de ImageDecoder
ou de BitmapFactory
(qui obtient un bitmap à partir d'un fichier JPEG). Vous pouvez ensuite utiliser
HeifWriter
pour écrire des valeurs HEIF
des images fixes de tampons d'octets YUV ou des instances
Surface
ou
Bitmap
Les métriques sur les médias sont également disponibles dans les
AudioTrack
,
AudioRecord
,
et MediaDrm
.
Android 9 introduit des méthodes dans la classe MediaDRM
pour obtenir des métriques, des niveaux HDCP, des niveaux de sécurité et un nombre de sessions, et pour mieux contrôler les niveaux de sécurité et les arrêts sécurisés. Pour en savoir plus, consultez le rapport de différences de l'API.
Sous Android 9, l'API AAudio ajoute
Compatibilité avec plusieurs attributs AAudioStream supplémentaires, y compris l'utilisation, le contenu
le type et le préréglage d'entrée. Ces attributs vous permettent de créer des flux
pour les applications VoIP
ou caméscope. Vous pouvez également définir l'ID de session pour associer un flux AAudio à un sous-mixage pouvant inclure des effets. Utilisez l'API AudioEffect
pour contrôler les effets.
Android 9 introduit l'API AudioEffect
pour le traitement des dynamiques.
Dans ce cours, vous pouvez créer des effets audio basés sur les chaînes,
l'égalisation, la compression multibande et le limiteur, sur plusieurs étapes. La
le nombre de bandes et d'étapes actives peut être configuré, et la plupart des paramètres peuvent être
en temps réel.
Sensibilité des coûts liés aux données dans JobScheduler
À partir d'Android 9, JobScheduler
peut utiliser les signaux d'état du réseau fournis par les opérateurs pour améliorer la gestion des tâches liées au réseau.
Les tâches peuvent déclarer leur taille de données estimée, le préchargement de signaux et spécifier des exigences réseau détaillées. JobScheduler
gère ensuite le travail en fonction
l'état du réseau. Par exemple, lorsque le réseau signale qu'il est congestionné, JobScheduler
peut différer les requêtes réseau volumineuses. Sur un
réseau illimité, JobScheduler
peut exécuter des jobs de préchargement
améliorer l'expérience utilisateur, par exemple en préchargeant les titres ;
Lorsque vous ajoutez des tâches, veillez à utiliser setEstimatedNetworkBytes()
.
setPrefetch()
,
et setRequiredNetwork()
le cas échéant, afin de
JobScheduler
gèrent le travail correctement. Lorsque votre tâche s'exécute, veillez à utiliser l'objet Network
renvoyé par JobParameters.getNetwork()
.
Sinon, vous utiliserez implicitement
le réseau par défaut de l'appareil, ce qui
risque de ne pas répondre à vos exigences, ce qui entraîne une utilisation inattendue des données.
API Neural Networks 1.1
Introduction de l'API Neural Networks d'Android 8.1 (niveau d'API 27) pour accélérer le machine learning sur l'appareil Android Android 9 étend et améliore l'API, en ajoutant la prise en charge de neuf nouvelles opérations :
- Opérations mathématiques au niveau des éléments:
- Opérations sur les tableaux :
Problème connu:lors de la transmission
ANEURALNETWORKS_TENSOR_QUANT8_ASYMM
aux Tensors vers
ANEURALNETWORKS_PAD
(disponible sur Android 9 ou version ultérieure).
il est possible que le résultat de NNAPI ne corresponde pas à celui d'une machine de niveau supérieur
les cadres d'apprentissage, tels que
TensorFlow Lite : À la place, vous devez transmettre ANEURALNETWORKS_TENSOR_FLOAT32
jusqu'à ce que le problème soit résolu.
De plus, l'API introduit également une nouvelle fonction, ANeuralNetworksModel_relaxComputationFloat32toFloat16()
, qui vous permet d'indiquer si ANEURALNETWORKS_TENSOR_FLOAT32
doit être calculé avec une plage et une précision aussi faibles que celles du format à virgule flottante 16 bits IEEE 754.
Autofill Framework
Android 9 introduit plusieurs améliorations que les services de saisie automatique peuvent implémenter pour améliorer davantage l'expérience utilisateur lors du remplissage de formulaires. Pour en savoir plus sur l'utilisation des fonctionnalités de saisie automatique dans votre application, consultez le guide Autofill Framework.
Renforcement de la sécurité
Android 9 introduit un certain nombre de fonctionnalités de sécurité, résumées dans les sections suivantes :
Confirmation de protection Android
Les appareils compatibles équipés d'Android 9 ou version ultérieure vous permettent d'utiliser Confirmation de protection Android. Lorsque vous utilisez ce workflow, affiche une invite demandant à l'utilisateur d'approuver une courte déclaration. Cette instruction permet à l'application de réaffirmer que l'utilisateur souhaite une transaction sensible, comme un paiement.
Si l'utilisateur accepte l'instruction, Android Keystore reçoit et stocke un
signature cryptographique protégée par une authentification de message par hachage
(HMAC). Une fois qu'Android Keystore a confirmé la validité du message, votre application
peut utiliser la clé générée à partir de trustedConfirmationRequired
dans le compte
environnement d'exécution (TEE) pour signer le message que l'utilisateur a accepté. La
signature indique, avec un fort degré de certitude, que l'utilisateur a vu
déclaration et l’a acceptée.
Attention : Confirmation de protection Android ne fournit pas de canal d'informations sécurisé à l'utilisateur. Votre application ne peut pas supposer des garanties de confidentialité autres que celles offertes par la plateforme Android. En particulier, n'utilisez pas ce workflow pour afficher des informations sensibles que vous n'afficheriez habituellement pas sur l'appareil de l'utilisateur.
Pour savoir comment ajouter la prise en charge de la confirmation de protection Android, consultez le guide Confirmation de protection Android.
Boîte de dialogue d'authentification biométrique unifiée
Sous Android 9, le système fournit des boîtes de dialogue d'authentification biométrique de votre application. Cette fonctionnalité crée une apparence et un emplacement pour la boîte de dialogue, ce qui renforce la confiance des utilisateurs quant à leur authentification un vérificateur biométrique de confiance.
Si votre application utilise
FingerprintManager
pour afficher une boîte de dialogue d'authentification par empreinte digitale, passez à
BiometricPrompt
à la place. BiometricPrompt
s'appuie sur le système pour afficher l'authentification
. Il modifie également son comportement
pour s'adapter au type de données biométriques
d’authentification
qu’un utilisateur a choisie.
Module matériel de sécurité
Les appareils compatibles équipés d'Android 9 ou d'une version ultérieure peuvent disposer de StrongBox Keymaster, une implémentation du HAL Keymaster qui se trouve dans un module matériel de sécurité. Le module contient les éléments suivants :
- Son propre processeur.
- Stockage sécurisé.
- Un véritable générateur de nombres aléatoires
- Mécanismes supplémentaires pour empêcher la falsification des packages et le téléchargement indépendant non autorisé d'applications.
Lors de la vérification des clés stockées dans StrongBox Keymaster, le système corrobore l'intégrité d'une clé avec l'environnement d'exécution sécurisé (TEE).
Pour en savoir plus sur l'utilisation de Strongbox Keymaster, consultez la page Sécurité du matériel d'assistance.
Importer des clés de manière sécurisée dans le keystore
Android 9 renforce la sécurité du déchiffrement des clés en ajoutant la possibilité d'importer des clés chiffrées de manière sécurisée dans le keystore à l'aide d'un format de clé ASN.1. Keymaster déchiffre ensuite les clés dans le keystore, de sorte que leur contenu n'apparaisse jamais en texte brut dans la mémoire hôte de l'appareil.
Découvrez comment importer des clés chiffrées de manière plus sécurisée.
Schéma de signature d'APK avec rotation des clés
Android 9 est compatible avec APK Signature Scheme v3. Ce schéma peut inclure un enregistrement de preuve de rotation dans son bloc de signature pour chaque certificat de signature. Cette fonctionnalité permet de signer votre application avec une nouvelle en associant les anciens certificats de signature du fichier APK à celui avec lequel qu'il est maintenant signé.
Découvrez comment faire pivoter des clés à l'aide de apksigner
.
Possibilité d'autoriser le déchiffrement de clé uniquement sur les appareils déverrouillés
Android 9 introduit l'indicateur unlockedDeviceRequired
. Cette option détermine
si le keystore nécessite le déverrouillage de l'écran avant d'autoriser
le déchiffrement de toutes les données en cours
de transfert ou stockées à l’aide de la clé spécifiée. Ces types
sont adaptées au chiffrement des données sensibles à stocker sur le disque,
ou des données d'entreprise. L'indicateur offre aux utilisateurs une assurance plus élevée que les données ne peuvent pas être déchiffrées lorsque l'appareil est verrouillé en cas de perte ou de vol de leur téléphone.
Pour empêcher le déchiffrement lorsque l'appareil est verrouillé, activez l'indicateur
en transmettant true
à setUnlockedDeviceRequired()
. Une fois cette étape terminée, lorsque l'écran de l'utilisateur est verrouillé,
les tentatives de déchiffrement ou de signature
de données à l'aide de cette clé échouent. Un appareil verrouillé nécessite un
Code, mot de passe, empreinte digitale ou tout autre facteur de confiance
y accéder.
Compatibilité avec l'ancien chiffrement
Les appareils Android 9 livrés avec Keymaster 4 sont compatibles avec l'algorithme Triple DES (Triple Data Encryption Algorithm). Si votre application fonctionne avec les anciennes qui nécessitent le Triple DES, utilisez ce type de chiffrement à l'aide d'identifiants sensibles.
Pour savoir comment renforcer la sécurité de votre application, consultez Sécurité pour Android Développeurs
Abandon du WPS
WPS (Wi-Fi Protected Setup) est obsolète pour des raisons de sécurité.
Sauvegardes Android
Android 9 ajoute de nouvelles fonctionnalités et options pour les développeurs pour la sauvegarde et la restauration. Les détails de ces modifications apparaissent dans les sections suivantes.
Sauvegardes avec chiffrement côté client
Android 9 prend en charge le chiffrement des sauvegardes Android avec un secret côté client. Cette compatibilité est activée automatiquement lorsque les conditions suivantes sont remplies :
- L'utilisateur a activé sauvegarde avec Android 9 ou supérieur.
- L'utilisateur a défini un verrouillage de l'écran pour son appareil, qui nécessite un code, un schéma ou un mot de passe pour être déverrouillé.
Lorsque cette mesure de confidentialité est activée, le code, le schéma ou le mot de passe de l'appareil est requis pour restaurer les données à partir des sauvegardes effectuées par l'appareil de l'utilisateur. Pour en savoir plus sur la technologie sous-jacente à cette fonctionnalité, consultez le livre blanc sur le service Google Cloud Key Vault.
Définir les conditions de l'appareil requises pour la sauvegarde
Si les données de votre application incluent des informations ou des préférences sensibles, Android 9 vous permet de définir les conditions de l'appareil selon lesquelles les données de votre application sont incluses dans la sauvegarde de l'utilisateur, par exemple lorsque le chiffrement côté client est activé ou qu'un transfert local d'appareil à appareil est en cours.
Pour en savoir plus sur la sauvegarde des données sur les appareils Android, consultez la section Présentation de la sauvegarde de données.
Accessibilité
Android 9 introduit des améliorations du framework d'accessibilité qui facilitent la fourniture d'expériences encore meilleures aux utilisateurs de votre application.
Sémantique de navigation
Les attributs ajoutés dans Android 9 vous permettent de définir plus facilement aux services d'accessibilité, en particulier les lecteurs d'écran, l'écran à un autre. Ces attributs peuvent aider les utilisateurs malvoyants à parcourir rapidement le texte dans l'interface utilisateur de votre application et à effectuer une sélection.
Par exemple, dans une application d'achat, un lecteur d'écran peut aider les utilisateurs à passer directement d'une catégorie d'offres à une autre, sans avoir à lire tous les éléments d'une catégorie avant de passer à la suivante.
Titres accessibles pour les volets
Sous Android 8.1 (niveau d'API 27) ou version antérieure, les services d'accessibilité ne peuvent pas toujours déterminer quand un volet spécifique de l'écran a été mis à jour, par exemple lorsqu'une activité remplace un fragment par un autre. Les volets sont constitués de éléments d'interface utilisateur liés visuellement et regroupés de manière logique, qui comprennent généralement Fragment.
Sous Android 9, vous pouvez fournir les titres des volets d'accessibilité, ou individuellement des titres identifiables, pour ces volets. Si un volet comporte un titre d'accessibilité, les services d'accessibilité reçoivent des informations plus détaillées lorsque le volet change. Cette fonctionnalité permet aux services de fournir des informations plus précises à l'utilisateur sur les modifications apportées à l'interface utilisateur.
Pour spécifier le titre d'un volet, utilisez la
android:accessibilityPaneTitle
. Vous pouvez également modifier le titre d'un volet d'interface utilisateur remplacé au moment de l'exécution à l'aide de setAccessibilityPaneTitle()
.
Par exemple, vous pouvez fournir un titre pour la zone de contenu d'un objet Fragment
.
Navigation basée sur les titres
Si votre application affiche du contenu textuel incluant des titres logiques, définissez l'attribut android:accessibilityHeading
sur true
pour les instances de View
qui représentent ces titres. Par
en ajoutant ces titres, vous autorisez les services d'accessibilité à aider les utilisateurs à naviguer
directement d'un titre à l'autre. Tout service d'accessibilité peut utiliser cette fonctionnalité pour améliorer l'expérience de navigation dans l'UI des utilisateurs.
Navigation et résultats de groupe
Les lecteurs d'écran utilisaient traditionnellement l'attribut android:focusable
pour déterminer quand lire un ViewGroup
ou un ensemble d'objets View
en tant qu'unité unique. Les utilisateurs pouvaient ainsi comprendre que les vues étaient liées de manière logique.
Sous Android 8.1 ou version antérieure, vous devez marquer chaque objet View
dans un ViewGroup
comme non sélectionnable et le ViewGroup
lui-même comme sélectionnable. Ce
la disposition de certaines instances de View
a été marquée comme sélectionnable, de sorte que
rendu la navigation au clavier plus fastidieuse.
À partir d'Android 9, vous pouvez utiliser le
android:screenReaderFocusable
à la place de l'attribut android:focusable
dans les cas où
Rendre un objet View
sélectionnable a des conséquences indésirables. Les lecteurs d'écran mettent en surbrillance tous les éléments qui ont défini android:screenReaderFocusable
ou android:focusable
sur true
.
Actions pratiques
Android 9 permet d'effectuer des actions pratiques au nom des utilisateurs :
- Interaction avec les info-bulles
- Les fonctionnalités supplémentaires du framework d'accessibilité vous permettent d'accéder aux
info-bulles dans l'interface utilisateur d'une application. Utilisez
getTooltipText()
pour lire le texte d'une info-bulle, ainsi qu'ACTION_SHOW_TOOLTIP
etACTION_HIDE_TOOLTIP
pour indiquer aux instances deView
d'afficher ou de masquer leurs info-bulles. - Ajout d'actions globales
- Android 9 permet d'effectuer deux actions supplémentaires sur l'appareil dans le
AccessibilityService
. Votre service peut aider les utilisateurs à verrouiller leurs appareils et à faire des captures d'écran à l'aide duGLOBAL_ACTION_LOCK_SCREEN
etGLOBAL_ACTION_TAKE_SCREENSHOT
des actions, respectivement.
Détails des modifications de fenêtre
Android 9 facilite le suivi des mises à jour des fenêtres d'une application
redessine plusieurs fenêtres simultanément. Lorsqu'un
TYPE_WINDOWS_CHANGED
l'événement, utilisez la méthode
getWindowChanges()
pour déterminer les modifications des fenêtres. Lors d'une mise à jour multifenêtre, chaque
génère son propre ensemble d'événements.
La méthode getSource()
renvoie la vue racine de la fenêtre associée à chaque événement.
Si une application a défini des titres de volet d'accessibilité pour son
objets View
, votre service peut reconnaître
lorsque l'UI de l'application est mise à jour. Lorsqu'un événement TYPE_WINDOW_STATE_CHANGED
se produit, utilisez les types renvoyés par getContentChangeTypes()
pour déterminer dans quelle mesure la fenêtre a été modifiée. Par exemple, le framework peut détecter si un volet change de titre ou disparaît.
Rotation
Pour éliminer les rotations involontaires, nous avons ajouté un mode qui épingle le même si la position de l'appareil change. Les utilisateurs peuvent déclencher la rotation manuellement en cas de besoin en appuyant sur un bouton de la barre système.
Dans la plupart des cas, l'impact sur la compatibilité des applications est minime. Toutefois, si votre application présente un comportement de rotation personnalisé ou utilise des paramètres d'orientation d'écran inhabituels, vous risquez de rencontrer des problèmes qui seraient passés inaperçus auparavant, lorsque la préférence de rotation de l'utilisateur était toujours définie sur "Portrait". Nous vous encourageons à examiner le comportement de rotation dans toutes les activités clés de votre application et à vous assurer que tous vos paramètres d'orientation de l'écran offrent toujours une expérience optimale.
Pour en savoir plus, consultez le comportement associé modifications.

Un nouveau mode de rotation permet aux utilisateurs de déclencher la rotation manuellement en cas de besoin à l'aide d'un bouton dans la barre système.
Texte
Android 9 apporte les fonctionnalités de texte suivantes au plate-forme:
Texte précalculé : La classe
PrecomputedText
s'améliore d'affichage de texte en vous permettant de calculer et de mettre en cache des informations à l'avance. Cela permet également à votre application de désactiver la mise en page le thread principal.Loupe: la classe
Magnifier
est de plate-forme, qui fournit une API Loupe, permettant une cohérence avec la loupe dans toutes les applications.Smart Linkify: Android 9 améliore la classe
TextClassifier
, qui exploite le machine learning pour identifier certaines entités dans un texte sélectionné suggérer des actions. Par exemple,TextClassifier
peut permettre à votre application de détecter que l'utilisateur a sélectionné un numéro de téléphone. Votre application peut alors suggérer à l'utilisateur d'appeler le numéro. Les fonctionnalités deTextClassifier
remplacent les fonctionnalités de la classeLinkify
.Mise en page du texte : plusieurs méthodes et attributs pratiques facilitent l'implémentation de votre conception d'interface utilisateur. Pour en savoir plus, consultez la documentation de référence
TextView
Conversion anticipée des fichiers DEX par ART
Sur les appareils équipés d'Android 9 ou version ultérieure, l'environnement d'exécution Android Le compilateur en amont (ART) optimise davantage l'exécutable Dalvik Executable compressé (DEX) en convertissant les fichiers DEX d'un package d'application en un fichier représentation compacte. Ce changement permet à votre application de démarrer plus rapidement et de consommer moins d'espace disque et de RAM.
Cette amélioration profite particulièrement aux appareils d'entrée de gamme dont les vitesses d'E/S disque sont plus lentes.
Traçage système sur l'appareil
Android 9 vous permet d'enregistrer des traces système à partir de votre appareil, puis de partager un rapport sur ces enregistrements avec votre équipe de développement. Ce rapport est compatible avec de nombreux formats, dont HTML.
En collectant ces traces, vous pouvez capturer des données temporelles liées aux processus et aux threads de votre application, et afficher d'autres types d'états d'appareils d'importance globale.
Pour en savoir plus sur cet outil, consultez Effectuer un traçage système sur l'appareil.