Android 8.0 (niveau d'API 26) introduit plusieurs pour les utilisateurs et les développeurs. Ce document présente les nouveautés pour les développeurs.
Pensez également à consulter <ph type="x-smartling-placeholder"></ph> Changements de comportement d'Android 8.0 pour en savoir plus sur les changements de plate-forme peut affecter vos applications.
Expérience utilisateur
Mode Picture-in-picture
Picture-in-picture sur Android 8.0
Android 8.0 (niveau d'API 26) permet le lancement des activités dans mode Picture-in-picture (PIP). PIP est un outil type spécial de mode multifenêtre principalement utilisé pour la lecture vidéo. Le mode PIP était à l'origine disponible pour Android TV uniquement Android 8.0 rend cette fonctionnalité disponible sur les autres appareils Android.
Lorsqu'une activité est en mode PIP, elle est mise en pause, mais
continuer à afficher le contenu. C'est pourquoi vous devez vous assurer que votre application
ne met pas en pause la lecture dans son onPause()
. Mettez la vidéo en pause dans onStop()
et reprenez la lecture dans onStart()
. Pour en savoir plus, consultez
Mode multifenêtre
Lifecycle
Pour spécifier que votre activité peut utiliser le mode PIP, définissez
android:supportsPictureInPicture
sur "true" dans le fichier manifeste.
(À partir d'Android 8.0, PIP ne nécessite pas
Attribut de fichier manifeste android:resizeableActivity
.
Cependant, vous devez définir
android:resizeableActivity
sur "true" si votre activité prend en charge d'autres
modes multifenêtres.)
Android 8.0 (niveau d'API 26) introduit un nouvel objet, PictureInPictureParams
,
que vous transmettez aux méthodes PIP pour spécifier le comportement d'une activité
en mode PIP. Cet objet spécifie des propriétés telles que
le format préféré de l'activité.
Les méthodes PIP existantes décrites dans Ajout Picture-in-picture peut désormais être sur tous les appareils Android, pas seulement sur Android TV. De plus, Android 8.0 fournit les méthodes suivantes pour prendre en charge Mode PIP:
Activity.enterPictureInPictureMode(PictureInPictureParams args)
: Place l'activité en mode Picture-in-picture. Format de l'activité et les autres paramètres de configuration sont spécifiés par args. Si des champs dans args sont vides, le système utilise les valeurs définies lors de la dernière fois appeléeActivity.setPictureInPictureParams()
.L'activité spécifiée est placée dans un coin de l'écran. le reste de l'écran est rempli avec l'activité précédente qui était à l’écran. L'activité qui passe en mode PIP est mise en pause, mais reste pour commencer. Si l'utilisateur appuie sur l'activité PIP, le système affiche un menu pour avec lequel l’utilisateur interagit ; aucun événement tactile n'atteint l'activité tant qu'elle est en mode PIP.
-
Activity.setPictureInPictureParams()
: Met à jour les paramètres de configuration PIP d'une activité. Si l'activité est actuellement en mode PIP, les paramètres sont mis à jour, ceci est utile si le format de l'activité change. Si l'activité n'est pas en mode PIP, ces paramètres de configuration sont utilisésenterPictureInPictureMode()
que vous appelez.
Notifications
Dans Android 8.0 (niveau d'API 26), nous avons repensé les notifications pour permettent de gérer le comportement des notifications de façon plus simple et plus cohérente. et paramètres. Ces modifications comprennent les opérations suivantes :
- Canaux de notification: lancement d'Android 8.0 les canaux de notification qui vous permettent de créer un canal personnalisable pour chaque type de notification à afficher. L'interface utilisateur fait référence aux canaux de notification en tant que catégories de notification. Pour savoir comment pour implémenter des canaux de notification, consultez Gestion canaux de notification.
- Points de notification: Android 8.0 permet d'afficher points ou badges, sur les icônes de lanceur d'applications. Les points de notification reflètent la présence de notifications que l'utilisateur n'a pas encore ignorées ni traitées. Pour savoir comment utiliser les pastilles de notification, consultez Notification et des badges.
- Répétition: les utilisateurs peuvent mettre en attente les notifications afin de les faire disparaître. pendant un certain temps avant de réapparaître. Les notifications réapparaissent avec le le même niveau d'importance avec lequel ils sont apparus pour la première fois. Les applis peuvent être supprimées ou mises à jour notification mise en attente, mais sa mise à jour n'entraîne pour qu'elle réapparaisse.
- Délai d'expiration des notifications: vous pouvez définir un délai d'expiration lors de la création d'un
notification avec
setTimeoutAfter()
Vous pouvez utiliser cette méthode pour spécifier le délai après lequel une notification doit être annulée. Si nécessaire, vous pouvez annuler une notification avant que le le délai avant expiration spécifié est écoulé. - Paramètres de notification: vous pouvez appeler
setSettingsText()
pour définir le texte qui s'affiche lorsque vous créez un lien vers le compte les paramètres de notification à partir d'une notification à l'aide de la IntentNotification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES
. Le système peut fournir les extras suivants avec l'intent de filtrage les paramètres que votre appli doit présenter aux utilisateurs:EXTRA_CHANNEL_ID
,NOTIFICATION_TAG
etNOTIFICATION_ID
. - Fermeture des notifications: les utilisateurs peuvent ignorer eux-mêmes les notifications.
applications peuvent les supprimer par programmation. Vous pouvez déterminer quand une notification
et pourquoi en appliquant la fonction
onNotificationRemoved()
à partir deNotificationListenerService
. - Couleurs d'arrière-plan: vous pouvez définir et activer une couleur d'arrière-plan pour
. Vous ne devez utiliser cette fonctionnalité que dans les notifications pour
les tâches en cours qui sont essentielles
pour un utilisateur à voir d'un coup d'œil. Pour
Par exemple, vous pouvez définir une couleur d'arrière-plan pour les notifications relatives à
un itinéraire ou un appel téléphonique en cours. Vous pouvez également définir
la couleur d'arrière-plan souhaitée en utilisant
setColor()
Procéder à cette opération vous permet d'utilisersetColorized()
pour activer l'utilisation d'une couleur d'arrière-plan pour une notification. - Style de messagerie: sous Android 8.0, les notifications qui utilisent le paramètre
Affichage de la classe
MessagingStyle
plus de contenu dans leur forme réduite. Vous devez utiliser la ClasseMessagingStyle
pour des notifications liées aux messages. Vous pouvez également utiliseraddHistoricMessage()
pour fournir du contexte à une conversation en ajoutant l'historique des messages aux notifications de messagerie.
![Notification avec appui prolongé sur le menu sous Android 8.0 (niveau d'API 26).](https://developer.android.google.cn/static/images/about/versions/oreo/notification-long-press.png?authuser=0000&hl=fr)
Les utilisateurs peuvent appuyer de manière prolongée sur les icônes du lanceur d'applications pour afficher notifications dans Android 8.0.
Autofill Framework
La création d'un compte, la connexion et les transactions par carte de crédit prennent du temps et sont sujettes les erreurs. Les utilisateurs peuvent facilement être frustrés par les applications qui nécessitent ces types de tâches répétitives.
Android 8.0 (niveau d'API 26) facilite le remplissage de formulaires, tels que les identifiants et les formulaires de carte de crédit, grâce à l'introduction de Autofill Framework. Les applications nouvelles et existantes fonctionnent avec Autofill Framework une fois que l'utilisateur l'a accepté la saisie automatique.
Vous pouvez prendre certaines mesures pour optimiser le fonctionnement de votre application avec le framework. Pour plus d'informations, consultez la page Présentation de Autofill Framework.
Polices téléchargeables
Android 8.0 (niveau d'API 26) et la bibliothèque Android Support 26 vous permettent de demander des polices à partir d'un au lieu de regrouper des polices dans l'APK ou de laisser Polices de téléchargement de l'APK Cette fonctionnalité réduit la taille de votre APK et augmente l'application taux de réussite de l'installation et permet à plusieurs applications de partager la même police.
Pour en savoir plus sur le téléchargement des polices, consultez Polices téléchargeables :
Polices XML
Android 8.0 (niveau d'API 26) introduit une nouvelle fonctionnalité, les polices en XML, qui
vous permet d'utiliser des polices
comme ressources. Il n'est donc pas nécessaire de regrouper les polices
en tant qu'éléments. Les polices sont compilées dans le fichier R
et sont automatiquement
disponible dans le système en tant que ressource. Vous pouvez ensuite accéder à ces polices à l'aide de la commande
d'un nouveau type de ressource, font
.
La bibliothèque Support 26 est entièrement compatible avec cette fonctionnalité sur les appareils. exécutant les versions 14 et ultérieures de l'API.
Pour en savoir plus sur l'utilisation des polices comme ressources et sur la récupération des polices système, consultez la page Polices en XML.
Redimensionnement automatique de TextView
Android 8.0 (niveau d'API 26) vous permet de définir la taille de la zone de texte automatiquement en fonction de la taille de TextView. Cela signifie qu’il est beaucoup il est plus facile d'optimiser la taille du texte sur différents écrans ou avec du contenu dynamique. Pour en savoir plus sur le dimensionnement automatique de TextView dans Android 8.0, consultez la section Dimensionnement automatique de TextView.
Icônes adaptatives
Android 8.0 (niveau d'API 26) introduit des icônes de lanceur adaptatives. Les icônes adaptatives prennent en charge les éléments visuels et peut afficher une variété de formes sur différents modèles d'appareils. Pour savoir comment créer des icônes adaptatives, consultez la page Icônes adaptatives. .
Gestion des couleurs
Les développeurs Android d'applications d'imagerie peuvent désormais exploiter les nouveaux appareils qui disposent d'un écran à large gamme de couleurs. Pour afficher une large gamme images, les applications devront activer un indicateur dans leur fichier manifeste (par activité) et charger des bitmaps avec un profil de couleur large intégré (AdobeRVB, Pro Photo RVB, DCI-P3, etc.).
API WebView
Android 8.0 fournit plusieurs API pour vous aider à gérer
Les objets WebView
qui affichent du contenu Web dans votre application.
Ces API, qui améliorent la stabilité et la sécurité de votre application, incluent
suivantes:
- API de la version
- API Google Safe Browsing
- API termination Handle
- API Renderer Importance
Pour en savoir plus sur l'utilisation de ces API, consultez Gérer les classes WebView
La classe WebView
inclut désormais une API Safe Browsing pour renforcer la sécurité
de la navigation sur le Web. Pour en savoir plus, consultez
API Google Safe Browsing.
Épingler des raccourcis et des widgets
Android 8.0 (niveau d'API 26) permet d'épingler des raccourcis dans l'application widgets. Dans votre application, vous pouvez créer des raccourcis et des widgets épinglés pour lanceurs compatibles, sous réserve de l'autorisation de l'utilisateur.
Pour en savoir plus, consultez les Épingler des raccourcis et des widgets guide de la fonctionnalité.
Format maximal de l'écran
Android 8.0 (niveau d'API 26) modifie la façon de configurer le format maximal d'une application.
Tout d'abord, Android 8.0 introduit le maxAspectRatio, que vous pouvez utiliser pour définir le format maximal de votre application. De plus, sous Android 8.0 et versions ultérieures, l'application le format maximal par défaut correspond au format natif de l'appareil sur lequel l'application est exécutée.
Pour savoir comment déclarer un format maximal, consultez la section Compatibilité avec plusieurs écrans.
Compatibilité multi-écran
À partir d'Android 8.0 (niveau d'API 26), la plate-forme propose des fonctionnalités compatible avec plusieurs écrans. Si une activité est compatible avec le mode multifenêtre et s'exécute sur un appareil doté de plusieurs écrans, l'utilisateur peut la déplacer d'un écran à un autre. Lorsqu'une application lance une activité, elle peut spécifier l'écran sur lequel l'activité doit s'exécuter.
Remarque : Si une activité est compatible avec mode multifenêtre, Android 8.0 active automatiquement la compatibilité multi-écran pour cette activité. Vous devez tester votre application pour s'assurer qu'elle fonctionne correctement dans un environnement multi-écran.
Une seule activité à la fois peut être réactivée, même si la l'application comporte plusieurs écrans. L'activité ciblée est à l'état de reprise ; toutes les autres activités visibles sont mises en pause, mais pas interrompues. Pour en savoir plus, sur le cycle de vie d'une activité lorsque plusieurs activités sont visibles, Voir la section Mode multifenêtre Lifecycle
Lorsqu'un utilisateur déplace une activité d'un écran à un autre, le système redimensionne l'activité et modifie l'environnement d'exécution si nécessaire. Votre activité peut gérer lui-même le changement de configuration, ou il peut permettre au système de le processus contenant votre activité et le recréer avec le nouveau . Pour en savoir plus, consultez Gestion de la configuration Modifications.
ActivityOptions
fournit deux nouvelles méthodes pour prendre en charge
plusieurs écrans:
setLaunchDisplayId()
- Spécifie l'écran sur lequel l'activité doit s'afficher lorsqu'elle est lancée.
getLaunchDisplayId()
- Renvoie l'écran de lancement actuel de l'activité.
L'interface système adb est étendue pour prendre en charge plusieurs écrans.
Vous pouvez maintenant utiliser la commande shell start
pour lancer une activité.
et pour spécifier l'affichage cible de l'activité:
adb shell start <activity_name> --display <display_id>
Marges et marges intérieures de mise en page unifiées
Android 8.0 (niveau d'API 26) vous permet de spécifier plus facilement les situations dans lesquelles les côtés opposés
d'un élément View
utilisent la même marge ou la même marge intérieure.
Plus précisément, vous pouvez désormais utiliser les attributs suivants dans votre fichier XML de mise en page
:
- <ph type="x-smartling-placeholder"></ph>
layout_marginVertical
, qui définit <ph type="x-smartling-placeholder"></ph>layout_marginTop
etlayout_marginBottom
simultanément. - <ph type="x-smartling-placeholder"></ph>
layout_marginHorizontal
, qui définit <ph type="x-smartling-placeholder"></ph>layout_marginLeft
etlayout_marginRight
simultanément. - <ph type="x-smartling-placeholder"></ph>
paddingVertical
, qui définit <ph type="x-smartling-placeholder"></ph>paddingTop
etpaddingBottom
simultanément. - <ph type="x-smartling-placeholder"></ph>
paddingHorizontal
, qui définit <ph type="x-smartling-placeholder"></ph>paddingLeft
etpaddingRight
simultanément.
Remarque:Si vous personnalisez la logique de votre application pour
différentes
langues et cultures, y compris l'orientation du texte, gardez à l'esprit que
n'ont aucune incidence sur les valeurs
<ph type="x-smartling-placeholder"></ph>
layout_marginStart
.
layout_marginEnd
.
paddingStart
ou
.
paddingEnd
. Vous pouvez définir ces valeurs vous-même, en plus de
Nouveaux attributs de mise en page verticale et horizontale, pour créer un comportement de mise en page
qui dépend de l'orientation du texte.
Capture du pointeur
Certaines applications, telles que les jeux, le bureau à distance et les clients de virtualisation, de contrôler le pointeur de la souris. La capture par pointeur est une nouvelle fonctionnalité fonctionnalité d'Android 8.0 (niveau d'API 26) qui fournit ce contrôle en diffusant tous les événements de souris à une vue sélectionnée de votre application.
À partir d'Android 8.0, un View
de votre application peut demander
la capture du pointeur et de définir un écouteur pour traiter les événements de pointeur capturés. La
le pointeur de la souris est masqué dans ce mode. La vue peut libérer la capture du pointeur
lorsqu'il n'a plus besoin des
informations de la souris. Le système peut également libérer
Capture du pointeur lorsque la vue perd son focus, par exemple lorsque l'utilisateur ouvre
une autre application.
Pour savoir comment utiliser cette fonctionnalité dans votre application, consultez Capture du pointeur :
Catégories d'applis
Android 8.0 (niveau d'API 26) permet à chaque application de déclarer une catégorie qui lui correspond
le cas échéant. Ces catégories permettent de regrouper les applications de
leur but ou leur fonction lorsque vous les présentez aux utilisateurs, par exemple dans les sections "Consommation des données",
Utilisation de l'espace de stockage. Vous pouvez définir une catégorie pour votre application en définissant
Attribut android:appCategory
dans votre <application>
balise du fichier manifeste.
Lanceur d'applications Android TV
Android 8.0 (niveau d'API 26) inclut une nouvelle version axée sur le contenu, L'écran d'accueil Android TV, disponible avec les Image de l'émulateur Android TV et du Nexus Player pour Android 8.0. Le nouvel écran d'accueil organise contenu vidéo dans des lignes correspondant aux chaînes, chacune contenant les programmes d'une application sur le système. Les applications peuvent publier plusieurs chaînes, et les utilisateurs peuvent configurer les chaînes sur lesquelles que vous souhaitez afficher sur l'écran d'accueil. L'écran d'accueil d'Android TV comprend également une ligne "Ma sélection", qui est contenant des programmes issus d'applications, basés sur les habitudes de visionnage de l'utilisateur. Les applications peuvent également fournir Des aperçus vidéo qui sont lus automatiquement lorsqu'un utilisateur sélectionne un programme. Les API pour l'insertion de canaux et de programmes fait partie des API TvProvider, qui sont distribuées sous forme de Module de bibliothèque Support avec Android 8.0.
AnimatorSet
À partir d'Android 8.0 (niveau d'API 26), l'API AnimatorSet
prend désormais en charge la recherche et la lecture dans
inverse. La recherche vous permet de définir la position de l'ensemble d'animation
à un moment précis. La lecture en sens inverse est utile si votre application inclut des animations
pour les actions qui peuvent être annulées. Au lieu de définir deux animations distinctes,
vous pouvez jouer le même jeu à l'envers.
Saisie et navigation
Groupes de navigation au clavier
Si une activité dans votre application utilise une hiérarchie de vues complexe, telle que celle de Figure 2 : Organisez des groupes d'éléments d'interface utilisateur en clusters pour faciliter la navigation au clavier entre eux. Les utilisateurs peuvent appuyer sur Méta+Tabulation ou Recherche+Tabulation les Chromebooks, pour passer d'un cluster à un autre. Bons exemples de les groupes incluent: les panneaux latéraux, les barres de navigation, les zones de contenu principale et les éléments. pouvant contenir de nombreux éléments enfants.
![Un exemple d'activité qui inclut cinq clusters de navigation que l'utilisateur
peuvent naviguer à l'aide du raccourci
du cluster de navigation clavier. Les clusters
s'affichent dans l'ordre suivant: panneau supérieur, panneau latéral gauche, contenu principal
zone, panneau inférieur et bouton d'action flottant.](https://developer.android.google.cn/static/images/about/versions/oreo/keyboard-navigation-clusters.png?authuser=0000&hl=fr)
Pour créer un élément View
ou ViewGroup
un cluster, définissez le
<ph type="x-smartling-placeholder"></ph>
android:keyboardNavigationCluster
à
true
dans le fichier XML de mise en page de l'élément, ou transmettre true
en setKeyboardNavigationCluster()
dans la logique d'UI de votre application.
Remarque:Les clusters ne peuvent pas être imbriqués, bien qu'ils ne soient pas imbriqués.
les clusters peuvent apparaître à différents niveaux de la hiérarchie. Si vous essayez de
d'autres clusters, le framework ne traite que les
ViewGroup
en tant que cluster.
Sur les appareils dotés d'un écran tactile, vous pouvez définir un cluster
Objets ViewGroup
android:touchscreenBlocksFocus
sur true
pour
autoriser la navigation uniquement pour les clusters vers et depuis ce cluster. Si vous appliquez ce
configuration sur un cluster, les utilisateurs ne peuvent pas utiliser la touche Tab ou les touches fléchées pour
accéder au cluster ou en sortir ; il doit appuyer sur la barre de navigation du cluster
une combinaison de touches.
Afficher le focus par défaut
Dans Android 8.0 (niveau d'API 26), vous pouvez attribuer le View
qui doit
recevoir le focus après la reprise d'une activité (re)créée et après que l'utilisateur appuie sur un
touche de navigation du clavier, telle que la touche de tabulation. Pour appliquer l'option "sélectionné par défaut"
, définissez l'attribut d'un élément View
<ph type="x-smartling-placeholder"></ph>
android:focusedByDefault
à true
dans
fichier XML de mise en page contenant l'élément d'interface utilisateur, ou transmettez true
à
setFocusedByDefault()
dans votre
la logique d'UI de l'application.
Sortie vocale
Les activités et services peuvent utiliser des instances de
TextToSpeech
pour dicter et prononcer le contenu. À compter du
Android 8.0 (niveau d'API 26), votre application peut obtenir des informations temporelles plus précises
le moment où un moteur de synthèse vocale commence à prononcer des mots synthétisés individuels,
tant que le moteur fournit ces informations. Vous pouvez utiliser cette fonctionnalité
pour attirer l'attention sur des mots spécifiques pendant que le moteur de synthèse vocale parle
de l'IA générative.
Pour utiliser ces améliorations du moteur de synthèse vocale dans votre application, enregistrez un
Instance de UtteranceProgressListener
. Dans le cadre du
processus d'enregistrement, incluez un gestionnaire pour le
onRangeStart()
.
Le moteur de synthèse vocale appelle
rangeStart()
pour enregistrer
Le moment où la lecture audio d'une plage de texte spécifique est attendue
pour commencer. Lorsque le contenu audio de cette plage de texte commence à être lu,
onRangeStart()
s'exécute. Votre application peut ensuite répondre à ce rappel, par exemple en
en mettant en évidence la plage de texte
associée à l'énoncé.
Pour en savoir plus sur le suivi de la progression de la lecture d'une synthèse vocale
consultez la classe UtteranceProgressListener
référence.
Système
Nouveaux détecteurs StrictMode
Android 8.0 (niveau d'API 26) ajoute trois nouveaux détecteurs StrictMode pour identifier bugs potentiels dans votre application:
detectUnbufferedIo()
détectera quand L'application lit ou écrit des données sans mise en mémoire tampon, ce qui peut avoir un impact important des performances.detectContentUriWithoutPermission()
va détecter les cas où votre application oublie accidentellement d'accorder des autorisations à une autre application lorsque démarrer une activité en dehors de votre application.detectUntaggedSockets()
détectera quand votre application effectue du trafic réseau sans utilisersetThreadStatsTag(int)
pour ajouter des balises à votre trafic en vue du débogage objectifs.
Données en cache
Android 8.0 (niveau d'API 26) offre de meilleurs conseils et comportements concernant les données mises en cache. Chaque
l'application se voit désormais attribuer un quota d'espace disque pour les données mises en cache, comme renvoyé par
getCacheQuotaBytes(UUID)
Lorsque le système doit libérer de l'espace disque, il commence par supprimer les fichiers mis en cache dans les applications. qui dépassent le quota alloué. Ainsi, si vous conservez les données mises en cache dans votre quota alloué, vos fichiers mis en cache seront parmi les derniers à être effacés du système lorsque nécessaires. Lorsque le système décide des fichiers mis en cache à supprimer dans votre application, il de prendre en compte les fichiers les plus anciens en premier (selon la date de modification).
Vous pouvez également activer deux nouveaux comportements par répertoire pour contrôler comment le système libère vos données mises en cache:
StorageManager.setCacheBehaviorAtomic()
permet d'indiquer qu'un répertoire et tout son contenu doivent être supprimés en tant qu'unité atomique unique.setCacheBehaviorTombstone(File, boolean)
permet d'indiquer qu'au lieu de supprimer des fichiers à l'intérieur d'un répertoire, ils devraient être tronqués à 0 octet dans la longueur du fichier vide, laissant intact le fichier vide.
Enfin, lorsque vous devez allouer de l'espace disque pour des fichiers volumineux, envisagez d'utiliser le nouveau
L'API allocateBytes(FileDescriptor, long)
, qui sera automatiquement effacée
mis en cache les fichiers d'autres applications (si nécessaire) pour répondre à votre demande. Pour décider
dispose de suffisamment d'espace disque pour stocker vos nouvelles données, appelez
getAllocatableBytes(UUID)
au lieu d'utiliser
getUsableSpace()
, car le premier prendra en compte toutes les mises en cache
des données que le système est disposé à effacer en votre nom.
Pagination du fournisseur de contenu
Nous avons mis à jour les fournisseurs de contenu afin d'inclure la prise en charge du chargement d'un grand ensemble de données, une page à la fois. Par exemple, une application photo avec des milliers de les images peuvent interroger un sous-ensemble de données pour les présenter sur une page. Chaque page des résultats renvoyés par un fournisseur de contenu sont représentés par un seul curseur . Un client et un fournisseur doivent tous deux implémenter la pagination pour utiliser cette fonctionnalité.
Pour en savoir plus sur les modifications apportées aux fournisseurs de contenu, consultez
ContentProvider
et
ContentProviderClient
Demandes d'actualisation du contenu
Les ContentProvider
et
Les classes ContentResolver
incluent désormais chacune un
refresh()
, ce qui permet aux clients de savoir plus facilement si
les informations demandées sont à jour.
Vous pouvez ajouter une logique d'actualisation
de contenu personnalisée en étendant
ContentProvider
Veillez à remplacer la valeur
Méthode refresh()
à renvoyer
true
, indiquant aux clients de votre fournisseur que vous avez essayé
pour actualiser les données vous-même.
Votre application cliente peut demander explicitement du contenu actualisé en appelant un
méthode différente, également appelée
refresh()
Lorsque vous appelez cette
, transmettez l'URI des données à actualiser.
Remarque:Étant donné que vous pouvez demander des données via un réseau,
vous devez appeler refresh()
depuis
côté client uniquement lorsqu'il y a de fortes indication
que le contenu est obsolète.
Le plus souvent, ce type d'actualisation du contenu s'explique
un balayer pour actualiser
qui demande explicitement à l'interface utilisateur actuelle d'afficher du contenu à jour.
Améliorations apportées à JobScheduler
Android 8.0 (niveau d'API 26) introduit un certain nombre d'améliorations dans JobScheduler
. Ces améliorations facilitent la conception
pour respecter le nouveau contexte
limites d'exécution, car vous pouvez généralement utiliser des jobs planifiés pour remplacer
les services d'arrière-plan désormais restreints ou les broadcast receivers implicites.
Voici les modifications apportées à JobScheduler
:
-
Vous pouvez désormais associer une file d'attente de tâches à un job planifié. Pour ajouter un
élément de travail à
à la file d'attente d'un job, appelez
JobScheduler.enqueue()
Lorsque le job est en cours d'exécution, il peut retirer de la file d'attente le travail en attente et le traiter. Cette fonctionnalité gère de nombreux cas d'utilisation qui, auparavant, appelé à démarrer un service d'arrière-plan, notamment des services qui implémententIntentService
-
Sur Android
La bibliothèque Support 26.0.0 introduit une nouvelle classe
JobIntentService
, qui fournit le même en tant queIntentService
, mais utilise des jobs au lieu de services lorsqu'ils sont exécutés sur Android 8.0 (niveau d'API 26) ou version ultérieure. -
Vous pouvez maintenant appeler
JobInfo.Builder.setClipData()
pour associer unClipData
à une offre d'emploi. Cette option permet d'activer d'associer les autorisations d'URI accordées à une tâche, de la même manière que les autorisations peuvent être propagées àContext.startService()
. Vous pouvez également utiliser des autorisations d'URI avec les intents dans les files d'attente de tâches. -
Les jobs planifiés prennent désormais en charge plusieurs nouvelles contraintes:
<ph type="x-smartling-placeholder">
- </ph>
JobInfo.isRequireStorageNotLow()
- La tâche ne s'exécute pas si l'espace de stockage disponible sur l'appareil est insuffisant.
JobInfo.isRequireBatteryNotLow()
- La tâche ne s'exécute pas si le niveau de batterie est inférieur ou égal au seuil critique seuil niveau auquel l'appareil affiche le niveau de batterie faible d'avertissement du système.
NETWORK_TYPE_METERED
- Le job nécessite une connexion réseau limitée, comme la plupart des données mobiles de votre application.
Datastore personnalisé
Android 8.0 (niveau d'API 26) vous permet de fournir un data store personnalisé selon vos préférences, qui peut être utile si votre application stocke les préférences dans une base de données cloud ou locale ; si les préférences sont spécifiques à chaque appareil. Pour en savoir plus sur sur la mise en œuvre du data store, reportez-vous à Custom Data Store :
Améliorations multimédias
VolumeShaper
Il existe une nouvelle classe VolumeShaper
. Utilisez
pour effectuer de courtes transitions de volume automatisées, telles que des fondus enchaînés et des fondus enchaînés.
Consultez la page Contrôler l'amplitude avec VolumeShaper.
pour en savoir plus.
Améliorations de la mise au point audio
Les applications audio partagent la sortie audio sur un appareil en demandant et en abandonnant la priorité audio.
Pour gérer les changements de mise au point, une application peut lancer ou arrêter la lecture, ou baisser le volume.
Il existe une nouvelle classe AudioFocusRequest
. L'utilisation de cette classe comme paramètre
requestAudioFocus()
,
Les applications présentent de nouvelles fonctionnalités pour la gestion des changements de priorité audio:
diminution automatique et
de gain de concentration différé.
Métriques sur les médias
Une nouvelle méthode getMetrics()
renvoie un PersistableBundle
.
objet contenant la configuration
et les informations sur les performances, exprimées sous la forme d'une carte d'attributs et de valeurs.
La méthode getMetrics()
est définie pour ces classes de médias:
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Les métriques sont collectées séparément pour chaque instance et sont conservées de l'instance. Si aucune métrique n'est disponible, la méthode renvoie "null". Les métriques réelles renvoyées dépendent de la classe.
MediaPlayer
À partir d'Android 8.0 (niveau d'API 26), MediaPlayer peut lire des contenus Protection par DRM et les contenus multimédias chiffrés au niveau de l'échantillon HLS.
Android 8.0 introduit un nouveau modèle
seekTo()
qui fournit un contrôle détaillé
lorsque vous recherchez une image. Il inclut un deuxième paramètre qui spécifie un mode de recherche:
SEEK_PREVIOUS_SYNC
déplace la position du contenu multimédia vers une image de synchronisation (ou clé) associée à une source de données située juste avant ou à un moment donné.SEEK_NEXT_SYNC
déplace la position du contenu multimédia vers une image de synchronisation (ou clé) associée avec une source de données située juste après ou à un moment donné.SEEK_CLOSEST_SYNC
déplace la position du contenu multimédia vers une image de synchronisation (ou clé) associée à une source de données la plus proche ou à l'heure donnée.SEEK_CLOSEST
déplace la position du contenu multimédia dans une image (ne correspondant pas nécessairement à une synchronisation) ou une trame clé) associée à une source de données située la plus proche de à un moment donné.
Pour une recherche en continu, les applications doivent utiliser l'un des modes SEEK_
plutôt que SEEK_CLOSEST
, qui fonctionne relativement plus lentement, mais qui peut être plus précis.
MediaRecorder
- MediaRecorder prend désormais en charge le format MPEG2_TS, ce qui est utile pour
streaming:
Kotlin
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)
Java
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);
MediaMuxer
peut désormais gérer un nombre illimité de flux audio et vidéo. Vous n'êtes plus limité à une piste audio et/ou à une piste vidéo. UtiliseraddTrack()
de mixer autant de pistes que vous voulez.MediaMuxer
peut également ajouter une ou plusieurs pistes de métadonnées contenant une image définie par l'utilisateur. des informations. Le format des métadonnées est défini par votre application. La La piste de métadonnées n'est compatible qu'avec les conteneurs MP4.
Les métadonnées peuvent être utiles pour un traitement hors connexion. Par exemple, les signaux gyroscopiques le capteur peut être utilisé pour la stabilisation vidéo.
Lorsque vous ajoutez une piste de métadonnées, le format MIME de la piste doit commencer par le préfixe
"application/". L'écriture de métadonnées est identique à l'écriture de données vidéo/audio, sauf
que les données ne proviennent pas d'un MediaCodec
. Au lieu de cela, l'application transmet
ByteBuffer
par un horodatage associé à
writeSampleData()
.
Le code temporel doit être identique à celui des pistes vidéo et audio.
Le fichier MP4 généré utilise l'élément TextMetaDataSampleEntry
défini dans la section
12.3.3.2 du fichier ISOBMFF pour signaler le format MIME des métadonnées. Lorsque vous utilisez MediaExtractor
pour extraire le fichier avec la piste de métadonnées, la méthode MIME
format des métadonnées sera extraite dans MediaFormat
.
Amélioration de l'accès aux fichiers multimédias
La
<ph type="x-smartling-placeholder"></ph>
Storage Access Framework (SAF) permet aux applications d'exposer un objet
DocumentsProvider
, qui peut fournir l'accès aux fichiers
d'une source de données à d'autres applications. En fait,
le fournisseur de documents peut même
donner accès à des fichiers
qui résident sur le stockage réseau ou qui utilisent un protocole tel que
Protocole MTP (Media Transfer Protocol).
Cependant, l'accès à des fichiers multimédias volumineux depuis une source de données distante introduit une défis:
- Les lecteurs multimédias nécessitent un accès au fichier via la recherche auprès d'un fournisseur de documents. Lorsqu'un fichier multimédia volumineux se trouve sur une source de données distante, le fournisseur de documents doit récupérer toutes les données à l'avance et créer un instantané descripteur de fichier. Le lecteur multimédia ne peut pas lire le fichier sans celui-ci et la lecture ne peut donc pas commencer tant que le fournisseur de documents n'a pas terminé télécharger le fichier.
- Les gestionnaires de collections multimédias, tels que les applications photo, doivent parcourir une série de accéder aux URI pour accéder aux contenus stockés sur une carte SD externe via des dossiers. Ce modèle d'accès permet d'effectuer des opérations de masse sur des médias le déplacement, la copie et la suppression, ce qui est plutôt lent.
- Les responsables de la collection multimédia ne peuvent pas déterminer l'emplacement d'un document en raison des URI. Il est donc difficile pour ces types d'applications de permettre aux utilisateurs de choisir où enregistrer un fichier multimédia.
Android 8.0 résout chacun de ces défis en améliorant l'accès au stockage Framework.
Fournisseurs de documents personnalisés
À partir d'Android 8.0, Storage Access Framework permet documents personnalisés fournisseurs pour créer des descripteurs de fichier consultables pour les fichiers résidant dans comme une source de données distante. Le SAF peut ouvrir un fichier pour obtenir un fichier natif pouvant être recherché du descripteur. La SAF envoie ensuite des requêtes d'octets discrets aux documents un fournisseur de services agréé. Cette fonctionnalité permet à un fournisseur de documents de renvoyer la plage exacte demandés par une application de lecteur multimédia, au lieu de mettre en cache l'intégralité à l'avance.
Pour utiliser cette fonctionnalité, vous devez appeler la nouvelle
StorageManager.openProxyFileDescriptor()
. La
La méthode openProxyFileDescriptor()
accepte un objet ProxyFileDescriptorCallback
comme rappel. La SAF appelle
le rappel chaque fois qu'une application cliente effectue des opérations de fichier sur le
descripteur de fichier renvoyé par le fournisseur de documents.
Accès direct aux documents
À partir d'Android 8.0 (niveau d'API 26), vous pouvez utiliser
getDocumentUri()
pour
Récupère un URI qui fait référence au même document que le mediaUri
donné.
Toutefois, comme l'URI renvoyé repose sur un
DocumentsProvider
, les gestionnaires de collections multimédias peuvent accéder
directement le document, sans avoir à parcourir les arborescences de répertoires limités.
Par conséquent, les gestionnaires de médias peuvent effectuer des opérations de fichiers sur le document.
beaucoup plus rapidement.
Attention:La méthode getDocumentUri()
ne localise que les fichiers multimédias. il n'autorise pas les applications
l'autorisation d'accéder à ces fichiers. Pour savoir comment obtenir l’accès
pour les fichiers multimédias, consultez la documentation de référence.
Chemins d'accès aux documents
Lorsque vous utilisez Storage Access Framework dans Android 8.0 (niveau d'API 26), vous pouvez utiliser
findDocumentPath()
, disponible dans les deux
les DocumentsContract
et
DocumentsProvider
pour déterminer le chemin à partir de la racine d'un système de fichiers en fonction de l'état
ID. La méthode renvoie ce chemin d'accès dans une
DocumentsContract.Path
. Lorsqu'un fichier
dispose de plusieurs chemins d'accès définis vers le même document, la méthode renvoie
qui est le plus souvent utilisé pour accéder au document avec l'ID donné.
Cette fonctionnalité est particulièrement utile dans les cas suivants:
- Votre application utilise la fonctionnalité "Enregistrer sous" qui affiche l'emplacement un document en particulier.
- Votre application affiche les dossiers dans une vue de résultats de recherche et doit charger l'enfant les documents figurant dans un dossier donné si l'utilisateur le sélectionne .
Remarque:Si votre application n'est autorisée à accéder qu'à certains documents
dans le chemin, la valeur renvoyée pour findDocumentPath()
n'inclut
les dossiers et documents auxquels votre application peut accéder.
Surveiller la lecture audio
Le service système AudioManager
gère une liste
des objets AudioPlaybackConfiguration
actifs, chacun d'entre eux
contient des informations sur une session de lecture audio spécifique. Votre application peut
récupérer l'ensemble des configurations actives en appelant
getActivePlaybackConfigurations()
À partir d'Android 8.0 (niveau d'API 26), vous pouvez enregistrer un rappel qui avertit
votre application lorsqu'un ou plusieurs
AudioPlaybackConfiguration
objets ont été modifiés. Pour ce faire,
appelez registerAudioPlaybackCallback()
, en transmettant une instance de
AudioManager.AudioPlaybackCallback
La
La classe AudioManager.AudioPlaybackCallback
contient
La méthode onPlaybackConfigChanged()
, que le système appelle lorsque l'audio
la configuration de lecture change.
Connectivité
Wi-Fi Aware
Android 8.0 (niveau d'API 26) est compatible avec le Wi-Fi Aware, basé sur le voisinage la spécification NAN (Awareness Networking). Sur les appareils disposant Le matériel Wi-Fi Aware, les applis et les appareils à proximité peuvent détecter le Wi-Fi et communiquer via le Wi-Fi sans point d'accès à Internet. Nous travaillons avec notre matériel partenaires d'intégrer la technologie Wi-Fi Aware aux appareils dès que possible. Pour pour savoir comment intégrer Wi-Fi Aware dans votre application, consultez Wi-Fi Aware.
Bluetooth
Android 8.0 (niveau d'API 26) améliore la compatibilité Bluetooth de la plate-forme en ajoutant les éléments suivants : fonctionnalités:
- Compatibilité avec la norme AVRCP 1.4, qui permet de parcourir les bibliothèques de titres
- Compatibilité avec la norme Bluetooth Low-Energy (BLE) 5.0
- Intégration du codec Sony LDAC dans la pile Bluetooth
Association d'un appareil associé
Android 8.0 (niveau d'API 26) fournit des API qui vous permettent de personnaliser le boîte de dialogue de demande d'association lors d'une tentative d'association à des appareils associés via Bluetooth, BLE et Wi-Fi. Pour en savoir plus, consultez Appareil associé Association
Pour en savoir plus sur l'utilisation du Bluetooth sur Android, consultez les Guide sur le Bluetooth. Pour modifications Bluetooth spécifiques à Android 8.0 (niveau d'API 26), consultez la la section Bluetooth de la Page Changements de comportement d'Android 8.0.
Partage
Partage intelligent
Android 8.0 (niveau d'API 26) apprend à connaître les partage personnalisé en fonction de vos préférences et comprend mieux pour chaque type de contenu avec lesquelles partager. Par exemple, si un utilisateur prend une photo d'un reçu, Android 8.0 peut suggérer une application de suivi des dépenses. si l'utilisateur prend un selfie, peut mieux gérer l'image. Android 8.0 apprend automatiquement des modèles en fonction des des préférences personnalisées.
Le partage intelligent fonctionne pour d'autres types de contenus que image
, par exemple
audio
, video
, text
, URL
etc.
Pour activer le partage intelligent, ajoutez jusqu'à trois ArrayList
des annotations de chaîne à l'intent qui partage le contenu. Les annotations doivent
décrire les principaux composants ou sujets du contenu. L'exemple de code suivant
montre comment ajouter des annotations à l'intent:
Kotlin
val annotations: ArrayList<String> = arrayListOf( "topic1", "topic2", "topic3" ) intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations )
Java
ArrayList<String> annotations = new ArrayList<>(); annotations.add("topic1"); annotations.add("topic2"); annotations.add("topic3"); intent.putStringArrayListExtra( Intent.EXTRA_CONTENT_ANNOTATIONS, annotations );
Pour en savoir plus sur les annotations de partage intelligent, consultez
EXTRA_CONTENT_ANNOTATIONS
Classificateur de texte
Sur les appareils compatibles, les applications peuvent utiliser un nouvel outil de classification de texte pour vérifier
la chaîne correspond à un type d'entité de classificateur connu et obtenir une suggestion de sélection
alternatives. Les entités reconnues par le système incluent les adresses, les URL,
les numéros de téléphone
et les adresses e-mail. Pour en savoir plus, consultez
TextClassifier
Accessibilité
Android 8.0 (niveau d'API 26) est compatible avec plusieurs nouvelles fonctionnalités d'accessibilité pour qui créent leurs propres services d'accessibilité:
- Une nouvelle catégorie de volume pour l'ajustement accessibilité volume.
- Empreinte digitale gestes comme mécanisme d'entrée.
- Multilingue de synthèse vocale.
- Une couche matérielle accessibilité raccourci permettant d'accéder rapidement au service d'accessibilité de votre choix.
- Assistance pour suite des gestes ou des séquences de traits programmatiques.
- Une accessibilité bouton permettant d'appeler l'une des nombreuses fonctionnalités d'accessibilité activées (disponible uniquement sur les appareils qui utilisent une zone de navigation affichée par logiciel).
- Normalisée valeurs de plage unilatérales.
- Plusieurs fonctions pour traitement du texte plus facilement, y compris les indications et l'emplacement du texte à l'écran caractères.
Sécurité et confidentialité
Autorisations
Android 8.0 (niveau d'API 26) introduit plusieurs nouvelles autorisations liées à la téléphonie:
- Le
L'autorisation
ANSWER_PHONE_CALLS
permet à votre appli de répondre les appels téléphoniques entrants de manière programmatique. Pour gérer un appel téléphonique entrant dans votre application, vous pouvez utiliseracceptRingingCall()
. - Le
L'autorisation
READ_PHONE_NUMBERS
accorde à votre appli un accès en lecture les numéros de téléphone stockés dans un appareil.
Ces autorisations sont toutes deux
classées comme
dangereux
et font tous deux partie du
PHONE
d'autorisations.
Nouvelles API d'accès aux comptes et de découverte
Android 8.0 (niveau d'API 26) introduit plusieurs améliorations applications ont accès aux comptes utilisateur. Pour les comptes qu'il gère, les authentificateurs peuvent utiliser leurs propres règles pour décider de masquer les comptes ou révéler les comptes à une application. Le système Android suit les applications qui peuvent à un compte particulier.
Dans les versions précédentes d'Android, les applications
qui voulaient suivre la liste des
les comptes d'utilisateurs devaient obtenir des mises à jour sur tous les comptes, y compris ceux avec
qui ne sont pas liés. Android 8.0 ajoute la
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
, qui permet aux applications de spécifier une liste de types de comptes
pour lesquels les modifications du compte doivent être reçues.
Modifications apportées à l'API
AccountManager propose six nouvelles méthodes pour aider les authentificateurs à gérer applications peuvent accéder à un compte:
setAccountVisibility(android.accounts.Account, java.lang.String, int)
: Définit le niveau de visibilité d'un compte utilisateur et d'un package spécifiques combinaison de valeurs.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: Obtient le niveau de visibilité d'un compte utilisateur et d'un package spécifiques. combinaison de valeurs. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: Permet aux authentificateurs d'obtenir les comptes et les niveaux de visibilité d'une un package donné. -
getPackagesAndVisibilityForAccount(android.accounts.Account)
: Permet aux authentificateurs d'obtenir les valeurs de visibilité stockées pour un compte donné. -
addAccountExplicitly(android.accounts.Account, java.lang.String, android.os.Bundle, java.util.Map<java.lang.String, java.lang.Integer>)
: Permet aux authentificateurs d'initialiser les valeurs de visibilité d'un compte. -
addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[])
: Ajoute un écouteurOnAccountsUpdateListener
auAccountManager
. Le système appelle cet écouteur chaque fois que la liste des comptes sur l'appareil change.
Android 8.0 (niveau d'API 26) introduit deux valeurs spéciales de nom de package pour spécifier la visibilité
pour les applications qui n'ont pas été définies à l'aide
setAccountVisibility(android.accounts.Account, java.lang.String, int)
. La
PACKAGE_NAME_KEY_LEGACY_VISIBLE
visibilité est appliquée aux applications
GET_ACCOUNTS
l'autorisation et les versions cibles
Android version antérieure à Android 8.0 ou dont
les signatures correspondent à l'authentificateur
ciblant n'importe quelle version d'Android.
PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE
fournit une valeur de visibilité par défaut pour
les applications qui n'ont pas été définies précédemment et pour lesquelles
PACKAGE_NAME_KEY_LEGACY_VISIBLE
n'est pas
applicables.
Pour en savoir plus sur les nouvelles API d'accès aux comptes et de découverte, consultez les
référence pour
AccountManager
et
OnAccountsUpdateListener
Tests
Tests d'instrumentation
Android 8.0 (niveau d'API 26) fournit les fonctionnalités supplémentaires suivantes pour les fonctionnalités des tests d'instrumentation.
Exécuter l'application sur des processus d'application autres que ceux par défaut
Vous pouvez maintenant spécifier qu'un test d'instrumentation spécifique doit s'exécuter sur en dehors du processus par défaut de votre application. Cette configuration est utile si votre application contient plusieurs activités qui s'exécutent dans des processus différents.
Pour définir une instrumentation de processus autre que celle par défaut, accédez à votre fichier manifeste
puis à l'emplacement souhaité
<ph type="x-smartling-placeholder"></ph>
<instrumentation>
. Ajoutez le
android:targetProcess
et définissez sa valeur sur l'une des
les éléments suivants:
- Nom d'un processus particulier.
- Liste de noms de processus séparés par une virgule.
- Un caractère générique (
"*"
), qui permet à l'instrumentation de s'exécuter sur tout processus lancé qui exécute du code dans le package spécifié dans l'attributandroid:targetPackage
.
Pendant l'exécution de votre test d'instrumentation, vous pouvez vérifier quel processus
les tests sont effectués en appelant getProcessName()
.
Signaler les résultats lors d'un test
Vous pouvez maintenant générer des rapports sur les résultats pendant l'exécution de votre test d'instrumentation.
plutôt qu'après, en appelant addResults()
.
Intents fictifs pour les tests
Pour faciliter la création de tests d'interface utilisateur isolés et indépendants pour les tests
activités, Android 8.0 (niveau d'API 26) introduit le
onStartActivity()
. Vous remplacez cette méthode dans une sous-classe personnalisée du
Instrumentation.ActivityMonitor
pour gérer une classe
que votre classe de test appelle.
Lorsque votre classe de test appelle l'intent, la méthode renvoie un bouchon
Instrumentation.ActivityResult
au lieu d'exécuter
l'intent lui-même. En utilisant cette logique d'intent fictif dans vos tests, vous pouvez
sur la manière dont votre activité prépare et gère l'intent que vous transmettez à un
une autre activité ou à une application complètement différente.
Exécution et Outils
Optimisations de la plate-forme
Android 8.0 (niveau d'API 26) permet d'optimiser l'environnement d'exécution et d'autres optimisations sur la plate-forme permet d'améliorer les performances. Ces optimisations incluent la récupération de mémoire de compactage simultané, une utilisation plus efficace de la mémoire et de la localité du code.
Ces optimisations permettent de réduire les temps de démarrage et d'améliorer les performances OS et applications.
Mise à jour de la compatibilité avec le langage Java
Android 8.0 (niveau d'API 26) est compatible avec plusieurs API Java OpenJDK supplémentaires:
java.time
depuis OpenJDK 8.java.nio.file
etjava.lang.invoke
d'OpenJDK 7.
Pour en savoir plus sur les classes et les méthodes de ces nouvelles consultez la documentation de référence de l'API.
Si vous souhaitez <ph type="x-smartling-placeholder"></ph> utiliser les fonctionnalités du langage Java 8 dans Android Studio, télécharger la dernière version preview.
Mise à jour des API du framework Android ICU4J
Android 8.0 (niveau d'API 26) étend
Framework Android ICU4J
API, un sous-ensemble des API ICU4J, permettant aux développeurs d'applications de
à utiliser dans le package android.icu
. Ces API utilisent des données de localisation
sur l'appareil. Vous pouvez donc réduire l'encombrement de votre APK en ne compilant pas
les bibliothèques ICU4J dans votre APK.
Tableau 1. Versions ICU, CLDR et Unicode utilisées sur Android.
Niveau d'API Android | Version ICU | Version CLDR | Version Unicode |
---|---|---|---|
Android 7.0 (niveau d'API 24), Android 7.1 (niveau d'API 25) | 56 | 28 | 8.0 |
Android 8.0 (niveau d'API 26) | 58.2 | 30.0.3 | 9.0 |
Pour en savoir plus sur l'internationalisation sur Android, y compris Compatibilité avec ICU4J, voir Internationalisation sur Android
Android Enterprise
De nouvelles API et fonctionnalités d'entreprise ont été introduites pour les appareils Android 8.0 (niveau d'API 26). Voici les principales améliorations apportées:
- Sur les appareils entièrement gérés, les profils professionnels permettent aux entreprises de séparer le travail des données à caractère personnel, tout en gérant les deux.
- La délégation d'API permet aux propriétaires d'appareils et aux propriétaires de profils d'attribuer une application à d'autres applications.
- Amélioration de l'expérience utilisateur dans le flux de provisionnement (nouvelles de personnalisation) réduisent le temps de configuration.
- De nouvelles commandes sur le Bluetooth, le Wi-Fi, la sauvegarde et la sécurité permettent aux entreprises gérer une plus grande partie de l'appareil. La journalisation de l'activité réseau aide les entreprises à suivre les problèmes.
Pour en savoir plus sur ces API et sur d'autres nouvelles API et fonctionnalités Android Enterprise, consultez la page Android en entreprise.