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 de lancer des activités en 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 uniquement pour Android TV. Android 8.0 le rend disponible sur d'autres appareils Android.
Lorsqu'une activité est en mode PIP, elle est en pause, mais elle doit continuer à afficher du contenu. C'est pourquoi vous devez vous assurer que votre application ne met pas la lecture en pause dans son gestionnaire 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
.
Toutefois, vous devez définir android:resizeableActivity
sur "true" si votre activité est compatible avec 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 la section Ajouter le mode Picture-in-picture peuvent désormais être utilisées sur tous les appareils Android, et 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)
: met 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éActivity.setPictureInPictureParams()
.L'activité spécifiée est placée dans un coin de l'écran. Le reste de l'écran est rempli par l'activité précédente qui était à l'écran. L'activité qui passe en mode PIP passe à l'état "En pause", mais reste démarrée. Si l'utilisateur appuie sur l'activité PIP, le système affiche un menu avec lequel l'utilisateur peut interagir. Aucun événement tactile n'atteint l'activité lorsqu'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 faciliter et harmoniser la gestion du comportement et des paramètres des notifications. 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. Dans l'interface utilisateur, les canaux de notification sont appelés catégories de notifications. 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 découvrir comment utiliser les points de notification, consultez la section Badges de notification.
- Mise en veille : les utilisateurs peuvent mettre en veille les notifications, ce qui les fait disparaître pendant un certain temps avant qu'elles ne réapparaissent. Les notifications réapparaissent avec le même niveau d'importance qu'au premier affichage. 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élais d'expiration des notifications : vous pouvez définir un délai d'expiration lorsque vous créez une notification à l'aide de
setTimeoutAfter()
. Vous pouvez utiliser cette méthode pour spécifier une durée au bout de laquelle 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 les paramètres de notification de votre application à partir d'une notification à l'aide de l'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 une notification. 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. Par exemple, vous pouvez définir une couleur d'arrière-plan pour les notifications liées aux itinéraires 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.

Sous Android 8.0, les utilisateurs peuvent appuyer de manière prolongée sur les icônes du lanceur d'applications pour afficher les notifications.
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 perdre patience avec les applications qui impliquent ce type 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 Android Support Library 26 vous permettent de demander des polices à une application du fournisseur au lieu de les regrouper dans l'APK ou de laisser l'APK télécharger des polices. Cette fonctionnalité réduit la taille de votre APK, augmente le taux de réussite de l'installation de l'application et permet à plusieurs applications de partager la même police.
Pour en savoir plus sur le téléchargement de polices, consultez la section 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 disponibles dans le système en tant que ressource. Vous pouvez ensuite accéder à ces polices à l'aide 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.
TextView à redimensionnement automatique
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 les icônes de lanceur adaptatives. Les icônes adaptatives sont compatibles avec les effets visuels et peuvent afficher différentes formes sur différents modèles d'appareils. Pour savoir comment créer des icônes adaptatives, consultez le guide 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:
- Version de l'API
- API Google SafeBrowsing
- API Termination Handle
- API Renderer Importance
Pour en savoir plus sur l'utilisation de ces API, consultez la section Gérer les WebViews.
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 les lanceurs compatibles, sous réserve de l'autorisation de l'utilisateur.
Pour en savoir plus, consultez le guide de la fonctionnalité Épingler des raccourcis et des widgets.
Format maximal de l'écran
Android 8.0 (niveau d'API 26) apporte des modifications à la configuration du 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, le format maximal par défaut d'une application correspond au format natif de l'appareil sur lequel elle s'exécute.
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 offre une meilleure prise en charge des écrans multiples. Si une activité est compatible avec le mode multifenêtre et qu'elle s'exécute sur un appareil avec plusieurs écrans, les utilisateurs peuvent 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 vous 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é sélectionnée est à l'état "reprise". Toutes les autres activités visibles sont en pause, mais pas arrêtées. Pour plus d'informations 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 elle-même le changement de configuration ou permettre au système de détruire le processus contenant votre activité et de la recréer avec les nouvelles dimensions. 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é.
Le shell adb est étendu pour prendre en charge plusieurs écrans.
La commande shell start
peut désormais être utilisée pour lancer une activité et spécifier l'écran 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 où 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 vos fichiers XML de mise en page :
-
layout_marginVertical
, qui définit simultanémentlayout_marginTop
etlayout_marginBottom
. -
layout_marginHorizontal
, qui définit simultanémentlayout_marginLeft
etlayout_marginRight
. - <ph type="x-smartling-placeholder"></ph>
paddingVertical
, qui définitpaddingTop
etpaddingBottom
simultanément. - <ph type="x-smartling-placeholder"></ph>
paddingHorizontal
, qui définitpaddingLeft
etpaddingRight
simultanément.
Remarque : Si vous personnalisez la logique de votre application pour prendre en charge différentes langues et cultures, y compris l'orientation du texte, gardez à l'esprit que ces attributs n'affectent pas les valeurs de 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, les clients de bureau à distance et les clients de virtualisation, bénéficient grandement du contrôle du pointeur de la souris. La capture du pointeur est une nouvelle fonctionnalité d'Android 8.0 (niveau d'API 26) qui offre ce contrôle en transmettant tous les événements de la souris à une vue ciblée dans votre application.
À partir d'Android 8.0, un View
dans votre application peut demander la capture du pointeur et définir un écouteur pour traiter les événements de pointeur capturés. Le pointeur de la souris est masqué dans ce mode. La vue peut libérer la capture du pointeur lorsqu'elle 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 à laquelle elle appartient, le cas échéant. Ces catégories permettent de regrouper les applications ayant un objectif ou une fonction similaires lorsque vous les présentez aux utilisateurs, par exemple dans "Utilisation des données", "Utilisation de la batterie" ou "Utilisation de l'espace de stockage". Vous pouvez définir une catégorie pour votre application en définissant l'attribut android:appCategory
dans la balise de fichier manifeste <application>
.
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 les contenus vidéo en lignes correspondant aux chaînes, qui sont chacune remplies de programmes par une application du système. Les applications peuvent publier plusieurs chaînes, et les utilisateurs peuvent configurer les chaînes qu'ils souhaitent voir 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'ajout 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 en arrière. 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 des actions pouvant ê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é de votre application utilise une hiérarchie de vues complexe, comme celle de la figure 2, envisagez d'organiser des groupes d'éléments d'interface utilisateur en clusters pour faciliter la navigation entre eux à l'aide du clavier. Les utilisateurs peuvent appuyer sur Maj+Tabulation ou sur Recherche+Tabulation sur les appareils Chromebook 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.

Pour faire d'un élément View
ou ViewGroup
un cluster, définissez l'attribut android:keyboardNavigationCluster
sur true
dans le fichier XML de mise en page de l'élément, ou transmettez true
à setKeyboardNavigationCluster()
dans la logique d'UI de votre application.
Remarque : Les clusters ne peuvent pas être imbriqués, bien que des clusters non imbriqués puissent 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'écrans tactiles, vous pouvez définir l'élément android:touchscreenBlocksFocus
d'un objet ViewGroup
désigné par un cluster sur true
pour autoriser la navigation dans et hors de ce cluster uniquement. Si vous appliquez ce
configuration sur un cluster, les utilisateurs ne peuvent pas utiliser la touche de tabulation 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 ce paramètre "en focus par défaut", définissez l'attribut android:focusedByDefault
d'un élément View
sur true
dans le fichier XML de mise en page contenant l'élément d'interface utilisateur, ou transmettez true
à setFocusedByDefault()
dans la logique d'interface utilisateur de votre application.
Sortie vocale
Les activités et les services peuvent utiliser des instances de TextToSpeech
pour dicter et prononcer du contenu. Depuis Android 8.0 (niveau d'API 26), votre application peut obtenir des informations temporelles plus précises sur le moment où un moteur de synthèse vocale commence à prononcer des mots synthétisés individuels, à condition que le moteur fournisse ces informations. Vous pouvez utiliser cette fonctionnalité pour attirer l'attention sur des mots spécifiques lorsque le moteur de synthèse vocale les prononce.
Pour utiliser ces améliorations du moteur de synthèse vocale dans votre application, enregistrez une instance de UtteranceProgressListener
. Dans le cadre du processus d'enregistrement, incluez un gestionnaire pour la méthode onRangeStart()
.
Le moteur de synthèse vocale appelle rangeStart()
pour enregistrer le moment où il s'attend à ce que la lecture audio d'une plage de texte spécifique commence. 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'un moteur de synthèse vocale, consultez la documentation de référence de la classe UtteranceProgressListener
.
Système
Nouveaux détecteurs StrictMode
Android 8.0 (niveau d'API 26) ajoute trois nouveaux détecteurs StrictMode pour vous aider à identifier les bugs potentiels dans votre application :
detectUnbufferedIo()
détectera quand votre application lit ou écrit des données sans mise en mémoire tampon, ce qui peut avoir un impact considérable sur les 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 génère du trafic réseau sans utilisersetThreadStatsTag(int)
pour taguer votre trafic à des fins de débogage.
Données en cache
Android 8.0 (niveau d'API 26) fournit de meilleurs conseils et comportements concernant les données mises en cache. Chaque application reçoit désormais un quota d'espace disque pour les données mises en cache, comme indiqué par getCacheQuotaBytes(UUID)
.
Lorsque le système doit libérer de l'espace disque, il commence par supprimer les fichiers mis en cache des applications qui dépassent le plus leur 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 du système à être effacés lorsque nécessaires. Lorsque le système décide des fichiers mis en cache à supprimer dans votre application, il considère d'abord les fichiers les plus anciens (déterminés par l'heure 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éterminer si l'appareil dispose d'assez d'espace disque pour contenir vos nouvelles données, appelez getAllocatableBytes(UUID)
au lieu d'utiliser getUsableSpace()
, car le premier tient compte de toutes les données mises en cache que le système est prêt à effacer en votre nom.
Pagination du fournisseur de contenu
Nous avons mis à jour les fournisseurs de contenu pour qu'ils prennent en charge le 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 . Pour pouvoir utiliser cette fonctionnalité, un client et un fournisseur doivent tous deux implémenter la pagination.
Pour en savoir plus sur les modifications apportées aux fournisseurs de contenu, consultez
ContentProvider
et
ContentProviderClient
Demandes d'actualisation du contenu
Les classes ContentProvider
et ContentResolver
incluent désormais chacune une méthode refresh()
, ce qui permet aux clients de savoir plus facilement si les informations qu'ils demandent sont à jour.
Vous pouvez ajouter une logique de rafraîchissement de contenu personnalisée en étendant ContentProvider
. Assurez-vous de remplacer la méthode refresh()
pour renvoyer true
, ce qui indique aux clients de votre fournisseur que vous avez essayé d'actualiser les données vous-même.
Votre application cliente peut demander explicitement un contenu actualisé en appelant une autre méthode, également appelée refresh()
. Lorsque vous appelez cette méthode, transmettez l'URI des données à actualiser.
Remarque : Étant donné que vous pouvez demander des données sur un réseau, vous ne devez appeler refresh()
côté client que lorsqu'il y a une forte 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 permettent à votre application de respecter plus facilement les nouvelles limites d'exécution en arrière-plan, car vous pouvez généralement utiliser des tâches planifiées pour remplacer les services en arrière-plan ou les broadcast receivers implicites désormais limités.
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'une tâche, 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 mettent en œuvreIntentService
-
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 désormais appeler
JobInfo.Builder.setClipData()
pour associer unClipData
à une tâche. 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 sont désormais compatibles avec plusieurs nouvelles contraintes :
JobInfo.isRequireStorageNotLow()
- La tâche ne s'exécute pas si l'espace de stockage disponible sur l'appareil est faible.
JobInfo.isRequireBatteryNotLow()
- La tâche ne s'exécute pas si le niveau de la batterie est inférieur ou égal au seuil critique. Il s'agit du niveau auquel l'appareil affiche la boîte de dialogue système Avertissement de batterie faible.
NETWORK_TYPE_METERED
- Le job nécessite une connexion réseau limitée, comme la plupart des données mobiles de votre application.
Data store personnalisé
Android 8.0 (niveau d'API 26) vous permet de fournir un datastore personnalisé à vos préférences, ce qui peut être utile si votre application stocke les préférences dans une base de données cloud ou locale, ou si les préférences sont spécifiques à l'appareil. Pour en savoir plus sur l'implémentation du datastore, consultez la section Datastore personnalisé.
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 priorité audio
Les applications audio partagent la sortie audio d'un appareil en demandant la priorité audio et en l'abandonnant.
Une application gère les changements de focus en démarrant ou en arrêtant la lecture, ou en baissant 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
degré 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 les classes multimédias suivantes :
MediaPlayer.getMetrics()
MediaRecorder.getMetrics()
MediaCodec.getMetrics()
MediaExtractor.getMetrics()
Les métriques sont collectées séparément pour chaque instance et persistent pendant toute la durée de vie 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 du contenu protégé par DRM et des contenus multimédias chiffrés au niveau des échantillons HLS.
Android 8.0 introduit une nouvelle commande seekTo()
surchargée qui offre un contrôle précis lors de la recherche d'un frame. 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 un frame de synchronisation (ou clé) associé à une source de données située juste avant ou à l'heure donnée.SEEK_NEXT_SYNC
déplace la position du contenu multimédia vers un frame de synchronisation (ou clé) associé à une source de données située juste après ou à l'heure donnée.SEEK_CLOSEST_SYNC
déplace la position du contenu multimédia vers un frame de synchronisation (ou clé) associé à une source de données située le plus près de l'heure donnée ou à cette heure.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. UtilisezaddTrack()
pour mixer autant de titres que vous le souhaitez.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 le traitement hors connexion. Par exemple, les signaux du gyroscope du capteur peuvent être utilisés pour stabiliser la 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 un ByteBuffer
avec un code temporel associé à la méthode writeSampleData()
.
Le code temporel doit être dans la même base temporelle que les pistes vidéo et audio.
Le fichier MP4 généré utilise le TextMetaDataSampleEntry
défini dans la section 12.3.3.2 de l'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
.
Accès amélioré aux fichiers multimédias
Le Storage Access Framework (SAF) permet aux applications d'exposer un DocumentsProvider
personnalisé, qui peut fournir à d'autres applications l'accès aux fichiers d'une source de données. 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).
Toutefois, l'accès à de grands fichiers multimédias à partir d'une source de données distante présente certains défis :
- Les lecteurs multimédias nécessitent un accès accessible à un fichier à partir 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 le descripteur de fichier. La lecture ne peut donc pas commencer tant que le fournisseur de documents n'a pas terminé de télécharger le fichier.
- Les gestionnaires de collections multimédias, tels que les applications photo, doivent parcourir une série 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 gestionnaires de collections multimédias ne peuvent pas déterminer l'emplacement d'un document à partir de son URI. Il est donc difficile pour ces types d'applications de permettre aux utilisateurs de choisir l'emplacement 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 descripteur de fichier accessible en lecture. Le SAF envoie ensuite des requêtes d'octets distinctes au fournisseur de documents. 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 méthode StorageManager.openProxyFileDescriptor()
. 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é est basé sur un DocumentsProvider
, les gestionnaires de collections multimédias peuvent accéder directement au document, sans avoir à parcourir les arborescences de répertoires à portée.
Par conséquent, les gestionnaires multimé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 sous 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
. Si un système de fichiers comporte plusieurs chemins définis vers le même document, la méthode renvoie le chemin le plus souvent utilisé pour accéder au document avec l'ID donné.
Cette fonctionnalité est particulièrement utile dans les scénarios suivants :
- Votre application utilise la fonctionnalité "Enregistrer sous" qui affiche l'emplacement un document en particulier.
- Votre application affiche des dossiers dans une vue de résultats de recherche et doit charger les documents enfants situés dans un dossier particulier 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 actuellement 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 classe AudioManager.AudioPlaybackCallback
contient la méthode onPlaybackConfigChanged()
, que le système appelle lorsque la configuration de la lecture audio change.
Connectivité
Wi-Fi Aware
Android 8.0 (niveau d'API 26) est compatible avec Wi-Fi Aware, qui est basé sur la spécification NAN (Neighbor Awareness Networking). Sur les appareils disposant de la 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 collaborons avec nos partenaires matériels pour proposer la technologie Wi-Fi Aware sur les 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) enrichit la compatibilité Bluetooth de la plate-forme en ajoutant les fonctionnalités suivantes :
- Compatibilité avec la norme AVRCP 1.4, qui permet de parcourir les bibliothèques de titres
- Compatibilité avec la norme Bluetooth à basse consommation (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 la boîte de dialogue de demande d'association lorsque vous essayez d'associer des appareils associés via Bluetooth, BLE et Wi-Fi. Pour en savoir plus, consultez la section Association d'un appareil compagnon.
Pour en savoir plus sur l'utilisation du Bluetooth sur Android, consultez les Guide sur le Bluetooth. Pour connaître les modifications apportées au Bluetooth spécifiques à Android 8.0 (niveau d'API 26), consultez 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
, comme audio
, video
, text
, URL
, etc.
Pour activer le partage intelligent, ajoutez un ArrayList
de trois annotations de chaîne maximum à 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 d'obtenir une suggestion de sélection
alternatives. Les entités reconnues par le système incluent les adresses, les URL,
numéros de téléphone et 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é:
- Nouvelle catégorie de volume pour régler le volume d'accessibilité.
- Gestes avec l'empreinte digitale comme mécanisme de saisie.
- Fonctionnalités de synthèse vocale multilingue
- Une couche matérielle accessibilité raccourci permettant d'accéder rapidement au service d'accessibilité de votre choix.
- Assistance pour suite des gestes, ni des séquences de traits programmatiques.
- Un bouton d'accessibilité pour 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 fonctionnalités pour traiter le texte plus facilement, y compris le texte d'invite et les emplacements des caractères de texte à l'écran.
Sécurité et confidentialité
Autorisations
Android 8.0 (niveau d'API 26) introduit plusieurs nouvelles autorisations liées à la téléphonie:
- L'autorisation
ANSWER_PHONE_CALLS
permet à votre application de répondre aux appels téléphoniques entrants de manière programmatique. Pour gérer un appel téléphonique entrant dans votre application, vous pouvez utiliseracceptRingingCall()
. - L'autorisation
READ_PHONE_NUMBERS
accorde à votre application un accès en lecture aux numéros de téléphone stockés sur un appareil.
Ces autorisations sont toutes deux classées comme dangereuses et font toutes deux partie du groupe d'autorisations PHONE
.
Nouvelles API d'accès au compte 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'ils gèrent, les authentificateurs peuvent utiliser leur propre stratégie pour décider de masquer des comptes ou de les révéler à une application. Le système Android suit les applications pouvant accéder à un compte particulier.
Dans les versions précédentes d'Android, les applications qui souhaitaient suivre la liste des comptes utilisateur devaient obtenir des informations sur tous les comptes, y compris ceux de types différents. 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é pour une combinaison de compte utilisateur et de package spécifique.-
getAccountVisibility(android.accounts.Account, java.lang.String)
: obtient le niveau de visibilité pour une combinaison de compte utilisateur et de package spécifique. -
getAccountsAndVisibilityForPackage(java.lang.String, java.lang.String)
: permet aux authentificateurs d'obtenir les comptes et les niveaux de visibilité d'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
à l'objetAccountManager
. 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 les niveaux de visibilité des applications qui n'ont pas été définis à l'aide de la méthode 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 applicable.
Pour en savoir plus sur les nouvelles API d'accès et de découverte de comptes, consultez la documentation sur 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 des tests 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 spécifique.
- 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 pour 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 de la classe Instrumentation.ActivityMonitor
pour gérer un intent particulier 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 façon dont votre activité prépare et gère l'intent que vous transmettez à un
une autre activité ou à une application complètement différente.
Environnement d'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 de l'OS et des applications.
Mise à jour de la compatibilité avec le langage Java
Android 8.0 (niveau d'API 26) prend en charge plusieurs API Java OpenJDK supplémentaires :
java.time
à partir d'OpenJDK 8.java.nio.file
etjava.lang.invoke
à partir 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 la prise en charge d'ICU4J, consultez la section Internationalisation sur Android.
Android Enterprise
De nouvelles fonctionnalités et API d'entreprise ont été introduites pour les appareils équipés d'Android 8.0 (niveau d'API 26). Voici quelques points clés :
- 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.