Fonctionnalités et API d'Android 9

Android 9 (niveau d'API 28) offre de nouvelles fonctionnalités intéressantes pour utilisateurs et 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 de l'API ou consultez le 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 intérieur avec texte en temps réel Wi-Fi

De nouvelles API de texte en temps réel prennent en charge le positionnement en intérieur dans vos applications.

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é ; L'appareil doit avoir services de localisation et recherche Wi-Fi activés (sous Paramètres > des données de localisation) et que votre application ACCESS_FINE_LOCATION l'autorisation. L'appareil n'a pas besoin de se connecter aux points d'accès pour utiliser le texte en temps réel. Pour des raisons de confidentialité, seul le téléphone peut déterminer la distance jusqu'à 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 l'algorithme de multilatération pour estimer la position de l'appareil la mieux adaptée des mesures. En règle générale, le résultat est précis dans un rayon d'un à deux mètres.

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 <ph type="x-smartling-placeholder"></ph> Application de démonstration Android WifiRttScan

Pour en savoir plus, consultez Localisation Wi-Fi: avec la latence DAR.

Compatibilité avec l'encoche

Écran des options pour les développeurs montrant différentes tailles d&#39;encoche

Tester l'encoche à 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 d'organiser son contenu autour des encoches d'un appareil. Vous pouvez définir cet attribut à l'une des valeurs suivantes:

Vous pouvez simuler une découpe d'écran sur n'importe quel appareil ou émulateur sous Android 9. comme suit:

  1. Activez les options pour les développeurs.
  2. Faites défiler l'écran Developer options (Options pour les développeurs) vers le bas jusqu'à la section Drawing (Dessin). puis sélectionnez Simuler un écran avec une encoche.
  3. Sélectionnez la taille de l'encoche.

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.

Notifications de messagerie

MessagingStyle avec une photo en pièce jointe.

Notification de messagerie

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 le Personnes Exemple.

Expérience de messagerie améliorée

À partir d'Android 7.0 (niveau d'API 24), vous pouvez ajouter une action pour répondre à ou saisir du texte directement depuis une notification. Amélioration d'Android 9 cette fonctionnalité, avec les améliorations suivantes:

  • Assistance simplifiée pour les participants aux conversations : Person classe permet d'identifier les personnes impliquées dans une conversation, y compris leur des avatars et des URI. De nombreuses autres API, telles que addMessage() Utilisez désormais la classe Person au lieu d'une CharSequence. La classe Person est également compatible avec le modèle de conception Builder.

  • Prise en charge des images: Android 9 affiche désormais les images dans les notifications SMS/MMS. 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 un Person 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 les 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 dans l'application afin que les utilisateurs terminer sa réponse.

  • Pour déterminer si une conversation est une conversation de groupe: vous pouvez utiliser setGroupConversation() pour identifier délibérément une conversation en tant que conversation de groupe ou non.

  • Définissez l'action sémantique d'un intent : setSemanticAction() vous permet d'attribuer une signification sémantique à une action, comme « marquer comme lu », « supprimer », « répondre », et ainsi de suite.

  • SmartResponse: Android 9 prend en charge les mêmes suggestions de réponses que celles disponibles dans votre application de chat. Utilisez RemoteInput.setChoices() pour fournir à l'utilisateur un tableau de réponses standards.

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 grâce aux modifications suivantes:

  • Blocage de groupes de chaînes: les utilisateurs peuvent désormais bloquer des groupes de chaînes entiers 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 le nouveau 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 du canal ou du groupe bloqué peut écouter ces intents et et réagissent 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 les réactions aux intents de diffusion, consultez Diffusions :

  • NotificationManager.Policy comporte trois nouvelles catégories de priorité "Ne pas déranger" :

  • NotificationManager.Policy dispose également de sept nouvelles constantes "Ne pas déranger" pour supprimer les interruptions visuelles:

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 d'une caméra frontale ou d'une caméra double arrière, vous pouvez créer des fonctionnalités innovantes ne suffit pas avec une seule caméra, comme la fluidité Zoom, bokeh et vision stéréo. L'API vous permet également d'appeler un opérateur logique flux vidéo qui alterne automatiquement entre deux caméras ou plus.

D'autres améliorations ont été apportées à l'appareil photo : les sessions paramètres qui aident à réduire les délais lors de la capture initiale, et le partage de surface qui permet gèrent différents cas d'utilisation sans devoir s'arrêter et démarrer le flux de la caméra. Nous avons également ajouté des API pour les activités Flash assistance et l'accès à l'OIS codes temporels pour la stabilisation de l'image et les effets spéciaux au niveau de l'application.

Sous Android 9, la fonctionnalité multi-appareil photo API est compatible avec les appareils photo monochromes pour les appareils FULL ou LIMITED. La sortie monochrome est obtenue via la YUV_420_888 le format avec Y pour les nuances de gris, U (Cb) pour 128 et V (Cr) pour 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. Utiliser ce cours au lieu de BitmapFactory et BitmapFactory.Options API.

ImageDecoder vous permet de créer un Drawable ou un Bitmap à partir d'un tampon d'octets, d'un fichier ou 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 le paramètre 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 obtenir une taille exacte de l'image décodée, transmettez les dimensions cibles dans setTargetSize() Vous pouvez également mettre à l'échelle les images en utilisant 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. comme les coins arrondis ou des masques circulaires. Utilisez setPostProcessor() avec une instance PostProcessor pour exécuter les commandes de dessin de votre choix.

Animation

Android 9 introduit le AnimatedImageDrawable permettant de dessiner et d'afficher des images animées GIF et WebP. AnimatedImageDrawable fonctionne de façon semblable à AnimatedVectorDrawable en ce sens que le thread de rendu pilote 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'est pas interférer avec d'autres opérations sur le thread de rendu. Cette implémentation permet votre application pour afficher une image animée sans gérer ses mises à jour ou interférer avec d'autres événements du thread UI de votre application.

Un AnimatedImageDrawable peut être décodé à l'aide d'une instance de ImageDecoder Les éléments suivants : l'extrait de code montre comment utiliser ImageDecoder pour décoder vos 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 pour modifier 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'image HEIF et API multimédias

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 des images à l'aide de l'image haute efficacité. Format de fichier (HEIF) ou HEIC), ce qui améliore la compression et réduit l'espace de stockage et les données réseau sur l'utilisation de l'IA générative. Les échantillons d'images fixes HEIF sont acceptés dans la MediaMuxer et MediaExtractor classes. 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. Après vous être assuré que votre L'appli 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 vers heic. à l'aide de ImageDecoder ou BitmapFactory (qui obtient 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 pour La classe MediaDRM pour obtenir des métriques, HDCP les niveaux de sécurité et le nombre de sessions, et pour mieux contrôler des niveaux de sécurité et des arrêts sécurisés. Consultez la section Différences entre les API rapport pour en savoir plus.

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 sur associer un flux AAudio à un sous-mix pouvant inclure des effets. Utilisez le l'API AudioEffect pour contrôler les effets.

Android 9 introduit le API AudioEffect pour traitement dynamique. 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 est configurable, 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 peuvent utiliser les signaux d'état du réseau fournis par les opérateurs pour améliorer la gestion des emplois liés aux réseaux.

Les jobs peuvent déclarer la taille estimée de leurs données, signaler le préchargement et spécifier configuration réseau requise. JobScheduler gère ensuite le travail en fonction l'état du réseau. Par exemple, lorsque le réseau signale qu'il est encombré, 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 job 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 développe et améliore l'API, en ajoutant neuf nouvelles opérations:

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 : Toi doit être transmis uniquement <ph type="x-smartling-placeholder"></ph> 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 de spécifier s'il faut calculer ANEURALNETWORKS_TENSOR_FLOAT32 avec une plage et une précision aussi basses que celles de la norme IEEE 754 16 bits à virgule flottante .

Autofill Framework

Android 9 introduit plusieurs améliorations concernant la saisie automatique services peuvent mettre en œuvre pour améliorer davantage l'expérience utilisateur lors des formulaires. Pour en savoir plus sur l'utilisation des fonctionnalités de saisie automatique dans votre application, consultez les guide Autofill Framework.

Renforcement de la sécurité

Android 9 introduit un certain nombre de fonctionnalités de sécurité, les sections suivantes résument:

Confirmation de protection Android

Les appareils compatibles équipés d'Android 9 ou version ultérieure vous offrent les avantages suivants : la possibilité 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 obtenir des conseils sur la prise en charge de Confirmation de protection Android, consultez la Protection Android Confirmation .

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 version ultérieure peuvent 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 confirme une l'intégrité de la clé à l'aide du TEE (Trusted Execution Environment).

Pour en savoir plus sur l'utilisation de Strongbox Keymaster, consultez la page Sécurité du matériel d'assistance.

Sécuriser l'importation de clés 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 dans le keystore à l'aide d'un Format de clé encodée ASN.1. Le Keymaster déchiffre ensuite les clés dans le Keystore : le contenu des clés n'apparaît jamais en texte brut dans la mémoire hôte de l'appareil.

Découvrez comment importer des clés chiffrées. en toute sécurité.

Schéma de signature d'APK avec rotation des clés

Android 9 est compatible avec APK Signature Scheme v3. Ce schéma offre l'option inclure un enregistrement de preuve de rotation dans son bloc de signature pour chaque signature certificat. 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é.

En savoir plus sur la rotation des clés à l'aide de apksigner

Option permettant 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. Cet indicateur offre aux utilisateurs une plus grande garantie que les données ne peuvent pas être déchiffrées lorsque l'appareil est verrouillé en cas de perte du téléphone ou volés.

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

Appareils Android 9 livrés avec Keymaster 4 et compatibles avec la fonctionnalité Triple Data l’algorithme de chiffrement, ou Triple DES. Si votre application fonctionne avec les anciennes qui nécessitent le Triple DES, utilisez ce type de chiffrement lors du cryptage à 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. Vous trouverez des informations détaillées sur ces modifications dans .

Sauvegardes avec chiffrement côté client

Android 9 prend en charge le chiffrement des sauvegardes Android avec un secret côté client. Cette prise en charge est activée automatiquement lorsque les si les conditions suivantes sont remplies:

Lorsque cette mesure de confidentialité est activée, le code, le schéma ou le mot de passe de l'appareil est requises pour restaurer les données à partir des sauvegardes effectuées par l'appareil de l'utilisateur. Pour apprendre sur la technologie à l'origine de cette fonctionnalité, consultez le document Google Cloud Key Vault d'assistance.

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 l'appareil conditions dans lesquelles les données de votre application sont incluses dans la sauvegarde de l'utilisateur (côté client, par exemple). le chiffrement est activé ou un transfert local d'appareil à appareil est en cours.

Pour en savoir plus sur la sauvegarde de données sur les appareils Android, voir Données Présentation de la sauvegarde

Accessibilité

Android 9 améliore l'accessibilité qui permettent d'offrir des 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 du texte dans l'UI de votre appli et lui permettre de faire une sélection.

Par exemple, dans une application d'achat, un lecteur d'écran peut aider les utilisateurs à naviguer directement d'une catégorie d'offres à la suivante, sans utiliser de lecteur d'écran de lire tous les éléments d'une catégorie avant de passer à la suivante.

Titres accessibles pour les volets

Sur 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é a remplacé un fragment par un autre fragment. 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 a un titre de volet 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 qui est remplacé dans à l'aide de setAccessibilityPaneTitle(). Par exemple, vous pouvez donner un titre à la zone de contenu d'une objet Fragment.

Navigation par titre

Si votre application affiche du contenu textuel comprenant des en-têtes logiques, définissez android:accessibilityHeading à 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. Tous les services d'accessibilité peuvent utiliser cette d'améliorer les performances Expérience de navigation dans l'interface utilisateur

Navigation et résultats de groupe

Les lecteurs d'écran utilisent traditionnellement android:focusable à déterminer quand il doit lire ViewGroup, ou une collection de View, comme une seule unité. De cette façon, que les utilisateurs puissent comprendre que les vues étaient liées de manière logique les unes aux autres.

Sous Android 8.1 et versions antérieures, vous devez marquer chaque objet View dans un ViewGroup comme non sélectionnable et ViewGroup elle-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. Lecteurs d'écran placer le curseur sur tous les éléments qui ont défini android:screenReaderFocusable ou android:focusable à true.

Actions pratiques

Android 9 permet désormais d'effectuer des actions pratiques pour le compte 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 et utiliser la ACTION_SHOW_TOOLTIP et ACTION_HIDE_TOOLTIP pour demander aux instances de View d'afficher ou masquer leurs info-bulles.
Actions globales ajoutées
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 du GLOBAL_ACTION_LOCK_SCREEN et GLOBAL_ACTION_TAKE_SCREENSHOT des actions, respectivement.

Détails des modifications de la 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. 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 TYPE_WINDOW_STATE_CHANGED se produit, utilisez les types renvoyés par getContentChangeTypes() pour déterminer l'évolution de la fenêtre. Par exemple, le framework peut détecter si un volet a un nouveau titre ou lorsqu'il a disparu.

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 l'application a un comportement de rotation personnalisé ou utilise une orientation d'écran inhabituelle ; vous risquez de rencontrer des problèmes qui n'auraient pas été remarqués auparavant, la préférence de rotation des utilisateurs a toujours été définie sur portrait. Nous vous invitons à suivre Examinez le comportement de rotation dans toutes les activités clés de votre application assurez-vous que tous les paramètres d'orientation de votre écran une expérience optimale.

Pour en savoir plus, consultez le comportement associé modifications.

Rotation de l&#39;application mobile affichant un nouveau mode de rotation permettant aux utilisateurs de déclencher manuellement la rotation

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 l'utilisateur passe un appel téléphonique à l'aide de ce numéro. Fonctionnalités de TextClassifier remplacer la fonctionnalité de la classe Linkify.

  • Mise en page du texte: plusieurs méthodes et attributs pratiques facilitent mettre en œuvre la conception de votre interface utilisateur. Pour en savoir plus, consultez la documentation de référence TextView

Conversion anticipée des fichiers DEX via 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 appli de démarrer plus rapidement moins d'espace disque et de RAM.

Cette amélioration profite particulièrement aux appareils bas de gamme avec des E/S disque plus lentes en ligne.

Traçage système sur l'appareil

Android 9 vous permet d'enregistrer les traces système de votre appareil, puis partagez un rapport de ces enregistrements avec votre équipe de développement. Ce rapport est compatible avec plusieurs formats, dont HTML.

En collectant ces traces, vous pouvez capturer des données temporelles liées aux processus et threads, et découvrez d'autres types d'appareils d'importance mondiale différents états.

Pour en savoir plus sur cet outil, consultez Exécuter un système sur l'appareil Traçage.