Android 6.0 (M) propose de nouvelles fonctionnalités pour les utilisateurs et les développeurs d'applications. Ce document présente les les plus importantes.
Premiers pas en tant que développeur
Pour commencer à créer des applications pour Android 6.0, vous devez d'abord télécharger le SDK Android. Utilisez ensuite SDK Manager pour télécharger la plate-forme du SDK Android 6.0 et les images système.
Mettre à jour votre niveau d'API cible
Afin d'optimiser votre application pour les appareils fonctionnant sous Android ,
définir votre targetSdkVersion
sur
"23"
, installez votre application sur un appareil Android
l'image système, la tester, puis publier l'application mise à jour avec
ce changement.
Vous pouvez utiliser les API Android tout en prenant en charge
en ajoutant à votre code des conditions qui vérifient le niveau d'API du système
avant d'exécuter des API non compatibles avec votre minSdkVersion
.
Pour en savoir plus sur la maintenance de la rétrocompatibilité, consultez la section Compatibilité
Différentes versions de la plate-forme
Pour plus d'informations sur le fonctionnement des niveaux d'API, consultez la page Qu'est-ce que l'API ? Niveau ?
Authentification par empreinte digitale
Cette version propose de nouvelles API pour vous permettre d'authentifier les utilisateurs en scannant leur empreinte sur les appareils compatibles, utilisez ces API conjointement avec le système Android Keystore ;
Pour authentifier les utilisateurs via le lecteur d'empreinte digitale, récupérez une instance du nouveau
la classe FingerprintManager
et appelez la
authenticate()
. Votre application doit s'exécuter sur un
un appareil doté d'un lecteur d'empreinte digitale. Vous devez implémenter l'interface utilisateur pour l'empreinte
d'authentification dans votre application et utiliser l'icône d'empreinte digitale Android standard dans votre interface utilisateur.
L'icône d'empreinte digitale Android (c_fp_40px.png
) est incluse dans le
Exemple d'authentification biométrique
Si vous développez plusieurs applications qui utilisent l'authentification par empreinte digitale, notez que chaque application doit
et authentifier l'empreinte de l'utilisateur de façon indépendante.
Pour utiliser cette fonctionnalité dans votre application, ajoutez d'abord le
Autorisation USE_FINGERPRINT
dans votre fichier manifeste.
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
Pour découvrir une implémentation de l'authentification par empreinte digitale dans une application, consultez Exemple d'authentification biométrique Pour découvrir comment utiliser ces méthodes d'authentification en association avec d'autres API Android, voir la vidéo <ph type="x-smartling-placeholder"></ph> API d'empreintes digitales et de paiement.
Si vous testez cette fonctionnalité, procédez comme suit:
- Si ce n'est pas déjà fait, installez Android SDK Tools révision 24.3.
- Enregistrez une nouvelle empreinte dans l'émulateur en accédant à Paramètres > Sécurité > Empreinte digitale, puis suivez les instructions d'enregistrement.
- Utilisez un émulateur pour émuler des événements tactiles d'empreinte digitale avec
la commande suivante. Utilisez la même commande pour émuler des événements tactiles d'empreinte digitale sur l'écran de verrouillage ou
dans votre application.
adb -e emu finger touch <finger_id>
Sous Windows, vous devrez peut-être exécuter
telnet 127.0.0.1 <emulator-id>
, puisfinger touch <finger_id>
Confirmer les identifiants
Votre application peut authentifier les utilisateurs en fonction de la date du dernier déverrouillage de leur appareil. Ce évite aux utilisateurs d'avoir à mémoriser d'autres mots de passe spécifiques à l'application et évite d'avoir à le faire pour implémenter votre propre interface utilisateur d'authentification. Votre application doit utiliser cette fonctionnalité conjointement avec une mise en œuvre d’une clé publique ou secrète pour l’authentification de l’utilisateur.
Pour définir le délai avant expiration pendant lequel la même clé peut être réutilisée après qu'un utilisateur a réussi
authentifiés, appelez la nouvelle
setUserAuthenticationValidityDurationSeconds()
lorsque vous configurez un KeyGenerator
ou
KeyPairGenerator
Évitez d'afficher trop souvent la boîte de dialogue de réauthentification. Vos applications doivent essayer d'utiliser le
l'objet cryptographique. Si le délai expire, utilisez l'objet
createConfirmDeviceCredentialIntent()
pour authentifier à nouveau l'utilisateur dans votre application.
Association d'applications
Cette version améliore le système d'intent d'Android en fournissant des liens d'applications plus puissants. Cette fonctionnalité vous permet d'associer une application à un domaine Web dont vous êtes propriétaire. D'après ces la plate-forme peut déterminer l'application par défaut à utiliser pour gérer une lien Web et ne pas inviter les utilisateurs à sélectionner une application. Pour savoir comment implémenter cette fonctionnalité, consultez Gérer les liens vers une application
Sauvegarde automatique des applications
Le système effectue désormais une sauvegarde et une restauration complètes des données pour les applications. Votre application doit cibler Android 6.0 (niveau d'API 23) pour activer ce comportement vous n'avez pas besoin d'ajouter de code supplémentaire. Si les utilisateurs suppriment leur compte Google, les données de sauvegarde sont également supprimées. Pour savoir comment cela et comment configurer les éléments à sauvegarder dans le système de fichiers, consultez Configurer la sauvegarde automatique des applications
Partage direct
Cette version fournit des API permettant de rendre le partage intuitif et rapide pour les utilisateurs. Vous pouvez maintenant Définir des cibles de partage direct qui lancent une activité spécifique dans votre application Ces personnes partagent directement sont présentées aux utilisateurs via le menu Partager. Cette fonctionnalité permet aux utilisateurs de partager du contenu à des cibles, telles que des contacts, au sein d'autres applications. Par exemple, la cible de partage direct peut lancer une activité dans une autre application de réseau social, ce qui permet à l'utilisateur de partager du contenu directement avec un un ami ou une communauté spécifique de cette application.
Pour activer les cibles de partage direct, vous devez définir une classe qui étend les
ChooserTargetService
. Déclarez votre
dans le fichier manifeste. Dans cette déclaration, spécifiez
Autorisation BIND_CHOOSER_TARGET_SERVICE
et
filtre d'intent à l'aide du
Action SERVICE_INTERFACE
.
L'exemple suivant montre comment déclarer
ChooserTargetService
dans votre fichier manifeste.
<service android:name=".ChooserTargetService" android:label="@string/service_name" android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> <intent-filter> <action android:name="android.service.chooser.ChooserTargetService" /> </intent-filter> </service>
Pour chaque activité que vous souhaitez exposer
ChooserTargetService
, ajoutez une
Élément <meta-data>
portant le nom
"android.service.chooser.chooser_target_service"
dans le fichier manifeste de votre application.
<activity android:name=".MyShareActivity” android:label="@string/share_activity_label"> <intent-filter> <action android:name="android.intent.action.SEND" /> </intent-filter> <meta-data android:name="android.service.chooser.chooser_target_service" android:value=".ChooserTargetService" /> </activity>
Interactions vocales
Cette version propose une nouvelle API d'interaction vocale qui, avec
Commandes vocales
vous permet d'intégrer des expériences vocales conversationnelles dans vos applications. Appelez la méthode
Méthode isVoiceInteraction()
pour déterminer si une commande vocale a été déclenchée
votre activité. Si tel est le cas, votre application peut utiliser
VoiceInteractor
pour demander une confirmation vocale à l'utilisateur, sélectionnez
dans une liste d'options, et plus encore.
La plupart des interactions vocales sont déclenchées par une commande vocale. Une activité d’interaction
vocale peut
mais sans intervention de l'utilisateur. Par exemple, une autre application lancée via une commande vocale
d'interaction peut également envoyer une intention pour lancer une interaction vocale. Pour déterminer si votre activité
lancé à partir de la requête vocale d'un utilisateur ou d'une autre application d'interaction vocale, appelez
isVoiceInteractionRoot()
. Si une autre application a lancé votre
activité, la méthode renvoie false
. Votre application peut alors inviter l'utilisateur à confirmer que
il avait prévu cette action.
Pour en savoir plus sur l'implémentation des commandes vocales, consultez la Site pour les développeurs concernant les commandes vocales
API Assist
Cette version offre aux utilisateurs une nouvelle façon d'interagir avec vos applications via un assistant. Pour utiliser cette , l'utilisateur doit autoriser l'assistant à utiliser le contexte actuel. Une fois la fonctionnalité activée, l'utilisateur vous pouvez appeler l'assistant dans n'importe quelle application en appuyant de manière prolongée sur le bouton Accueil.
Votre application peut choisir de ne pas partager le contexte actuel avec l'Assistant en définissant le
FLAG_SECURE
. En plus des
ensemble standard d'informations que la plate-forme transmet à l'assistant, votre application peut partager
des informations supplémentaires à l'aide de la nouvelle classe AssistContent
.
Pour fournir à l'Assistant plus de contexte provenant de votre application, procédez comme suit:
- Implémentez l'interface
Application.OnProvideAssistDataListener
. - Enregistrez cet écouteur en utilisant
registerOnProvideAssistDataListener()
- Pour fournir des informations contextuelles spécifiques à une activité, remplacez la
onProvideAssistData()
et, éventuellement, le nouveauonProvideAssistContent()
.
Périphériques de stockage adoptables
Avec cette version, les utilisateurs peuvent adopter des périphériques de stockage externes tels que des cartes SD. Adopter une
un périphérique de stockage externe chiffre et
formate l’appareil pour se comporter comme la mémoire de stockage interne. Ce
permet aux utilisateurs de déplacer à la fois les applications et les données privées de ces applications d'un appareil de stockage à un autre. Quand ?
des applications mobiles, le système respecte
android:installLocation
dans le fichier manifeste.
Si votre application accède aux API ou aux champs suivants, sachez que les chemins d'accès aux fichiers qu'ils renvoient change de façon dynamique lorsque l'application passe d'un périphérique de stockage interne à un périphérique de stockage externe. Lorsque vous créez des chemins d'accès aux fichiers, il est fortement recommandé de toujours appeler ces API de manière dynamique. N'utilisez pas de chemins d'accès codés en dur et ne conservez pas de chemins d'accès complets créés précédemment.
- Méthodes
Context
: <ph type="x-smartling-placeholder"> - Champs
ApplicationInfo
: <ph type="x-smartling-placeholder">
Pour déboguer cette fonctionnalité, vous pouvez activer l'adoption d'une clé USB connecté à un appareil Android via un câble USB On-The-Go (OTG), en exécutant la commande suivante:
$ adb shell sm set-force-adoptable true
Notifications
Cette version ajoute les modifications suivantes à l'API pour les notifications:
- Nouveau niveau de filtre
INTERRUPTION_FILTER_ALARMS
correspond au nouveau mode Ne pas déranger Alarmes uniquement. - Nouvelle valeur de catégorie
CATEGORY_REMINDER
utilisée pour distinguer les rappels planifiés par l'utilisateur des autres événements (CATEGORY_EVENT
) et alarmes (CATEGORY_ALARM
). - Nouvelle classe
Icon
que vous pouvez joindre à vos notifications via lesetSmallIcon()
etsetLargeIcon()
méthodes. De même, le La méthodeaddAction()
accepte désormais un objetIcon
au lieu d'un ID de ressource drawable. - La nouvelle méthode
getActiveNotifications()
qui permet à votre applications pour savoir lesquelles de leurs notifications sont actives.
Compatible avec les stylets Bluetooth
Cette version offre une meilleure prise en charge de la saisie utilisateur à l'aide d'un stylet Bluetooth. Les utilisateurs peuvent associer
et connectez un stylet Bluetooth compatible à leur téléphone ou tablette. Une fois connecté, positionnez
les informations de l'écran tactile sont fusionnées avec les informations de pression et de bouton du stylet
offrent une plus grande liberté d'expression qu'avec l'écran tactile seul. Votre application peut détecter
l'appui sur le bouton du stylet et d'effectuer des actions secondaires, en enregistrant
View.OnContextClickListener
et
GestureDetector.OnContextClickListener
objets dans votre activité.
Utiliser les constantes et les méthodes MotionEvent
pour détecter le bouton du stylet
interactions:
- Si l'utilisateur touche un stylet avec un bouton à l'écran de votre application,
La méthode
getTooltype()
renvoieTOOL_TYPE_STYLUS
- Pour les applications ciblant Android 6.0 (niveau d'API 23),
getButtonState()
renvoieBUTTON_STYLUS_PRIMARY
lorsque l'utilisateur appuie sur le bouton principal du stylet. Si le stylet dispose d'un deuxième bouton, la même méthode renvoieBUTTON_STYLUS_SECONDARY
lorsque l'utilisateur appuie dessus. Si l'utilisateur appuie sur les deux boutons simultanément, la méthode renvoie les deux valeurs auxquelles l'opérateur OU est appliqué. (BUTTON_STYLUS_PRIMARY
|BUTTON_STYLUS_SECONDARY
). -
Pour les applications ciblant une version de plate-forme antérieure, le
La méthode
getButtonState()
renvoieBUTTON_SECONDARY
(pour appuyer sur le bouton principal du stylet),BUTTON_TERTIARY
(pour appuyer sur le bouton secondaire du stylet), ou les deux.
Amélioration de la recherche Bluetooth basse consommation
Si votre application effectue des recherches Bluetooth Low Energy, utilisez le nouveau
setCallbackType()
pour spécifier que vous souhaitez que le système notifie les rappels lorsqu'il trouve ou voit pour la première fois
un paquet d'annonces correspondant à l'ensemble ScanFilter
. Ce
est plus économe en énergie que la version précédente de la plate-forme.
Prise en charge de Hotspot 2.0 version 1
Cette version est compatible avec la spécification Hotspot 2.0 version 1 sur les appareils Nexus 6 et Nexus 9. À
provisionner des identifiants de point d'accès 2.0 dans votre application, utilisez les nouvelles méthodes de la
WifiEnterpriseConfig
, comme
setPlmn()
et
setRealm()
Dans
WifiConfiguration
, vous pouvez définir
FQDN
et les
providerFriendlyName
.
La nouvelle méthode isPasspointNetwork()
indique si un objet
représente un point d'accès Hotspot 2.0.
Mode d'affichage 4K
La plate-forme permet désormais aux applications de demander que la résolution d'affichage soit mise à niveau vers le rendu 4K.
sur du matériel compatible. Pour interroger la résolution physique actuelle, utilisez la nouvelle
Display.Mode
. Si l'interface utilisateur est dessinée avec une résolution logique inférieure et qu'elle
à une résolution physique plus élevée, n'oubliez pas que la résolution physique
Les résultats renvoyés par la méthode getPhysicalWidth()
peuvent différer de la logique
résolution signalée par getSize()
.
Vous pouvez demander au système de modifier la résolution physique de votre application pendant son exécution, en définissant
la propriété preferredDisplayModeId
du
fenêtre. Cette fonctionnalité est utile si vous souhaitez passer à une résolution d'écran 4K. En mode 4K
, l'interface utilisateur continue de s'afficher dans sa résolution d'origine (par exemple, 1080p) et est améliorée
4K, mais les objets SurfaceView
peuvent afficher du contenu avec la résolution native.
Listes de couleurs "ColorStateLists" pouvant être personnalisées
Les attributs de thème sont désormais pris en charge dans
ColorStateList
pour les appareils équipés d'Android 6.0 (niveau d'API 23). La
Resources.getColorStateList()
et
Resources.getColor()
méthodes ont été
obsolète. Si vous appelez ces API, appelez la nouvelle
Context.getColorStateList()
ou
Context.getColor()
à la place. Ces méthodes sont
Également disponible dans la bibliothèque Appcompat v4 via ContextCompat
.
Fonctionnalités audio
Cette version améliore le traitement audio sur Android, y compris:
- Compatibilité avec le MIDI
avec les nouvelles API
android.media.midi
. Utiliser ces API pour envoyer et recevoir des appareils MIDI événements. - Nouveaux
AudioRecord.Builder
etAudioTrack.Builder
pour créer des objets respectivement de capture et de lecture audio numériques, et de configurer des fichiers audio. les propriétés de la source et du récepteur pour remplacer les valeurs par défaut du système. - Des hooks d'API pour associer des périphériques audio et d'entrée. Cela est particulièrement utile si votre application
permet aux utilisateurs de lancer une recherche vocale à partir d'une manette de jeu ou d'une télécommande connectée à Android
TV. Le système appelle le nouveau
onSearchRequested()
lorsque l'utilisateur lance une recherche. Pour déterminer si le périphérique d'entrée de l'utilisateur dispose d'un récupérez l'objetInputDevice
de ce rappel, puis appelez la fonction Nouvelle méthodehasMicrophone()
. - La nouvelle méthode
getDevices()
vous permet récupérer la liste de tous les appareils audio actuellement connectés au système. Vous pouvez également enregistrer unAudioDeviceCallback
si vous souhaitez que le système notifie votre application lorsqu'un appareil audio se connecte ou se déconnecte.
Fonctionnalités vidéo
Cette version ajoute de nouvelles fonctionnalités aux API de traitement vidéo, y compris:
- Nouvelle classe
MediaSync
qui aide les applications à afficher de manière synchrone des flux audio et vidéo. Les tampons audio sont envoyés de manière non bloquante et sont renvoyé par un rappel. Il est également compatible avec la vitesse de lecture dynamique. - Un nouvel événement
EVENT_SESSION_RECLAIMED
, qui indique qu'une ouverte par l'application a été récupérée par le gestionnaire de ressources. Si votre application utilise des sessions DRM, vous devez gérer cet événement et vous assurer de ne pas utiliser une session récupérée. - Nouveau code d'erreur
ERROR_RECLAIMED
, qui indique que le gestionnaire de ressources a récupéré la ressource multimédia utilisée par le codec. À cette exception près, le champ le codec doit être libéré, car il est passé à l'état final. - Nouvelle interface
getMaxSupportedInstances()
pour obtenir une indication sur le nombre maximal de d'instances de codec simultanées. - Nouvelle méthode
setPlaybackParams()
permettant de définir la vitesse de lecture des contenus multimédias pour les la lecture au ralenti. De plus, il étire ou accélère automatiquement la lecture audio dans en même temps que la vidéo.
Fonctionnalités de l'appareil photo
Cette version inclut les nouvelles API suivantes pour accéder à la lampe de poche de l'appareil photo et pour retraitement des images par l'appareil photo:
API Flashlight
Si un appareil photo est équipé d'un flash, vous pouvez appeler la méthode
setTorchMode()
permettant d'activer ou de désactiver le mode lampe de poche sans ouvrir l'appareil photo. L'application
n'est pas propriétaire exclusif du flash ou de l'appareil photo. Le mode lampe de poche est activé
et devient indisponible lorsque la caméra devient indisponible ou qu'une autre caméra
les ressources qui maintiennent la lampe de poche allumée deviennent indisponibles. D'autres applis peuvent aussi appeler
setTorchMode()
pour désactiver le mode lampe de poche. Lorsque la dernière application qui a activé le mode lampe est fermée, la lampe de poche
est désactivé.
Vous pouvez enregistrer un rappel pour être averti de l'état du mode lampe de poche en appelant la méthode
registerTorchCallback()
. La première fois que le rappel est enregistré, il est immédiatement appelé avec le mode lampe de poche.
l'état de tous les appareils photo actuellement connus équipés d'un flash. Si le mode lampe de poche est activé ou
avec succès, le
onTorchModeChanged()
est appelée.
API de retraitement
L'API Camera2
est étendue pour prendre en charge YUV et les images privées
le traitement d'image
au format opaque. Pour déterminer si ces capacités
de retraitement sont disponibles,
appelez getCameraCharacteristics()
et vérifiez l'état
Clé REPROCESS_MAX_CAPTURE_STALL
. Si un
prend en charge le retraitement, vous pouvez créer une session de capture de caméra à retraiter en appelant
createReprocessableCaptureSession()
,
et créer des requêtes pour le retraitement
du tampon d'entrée.
Utiliser la classe ImageWriter
pour connecter le flux du tampon d'entrée à l'appareil photo
retraitement de l'entrée. Pour obtenir un tampon vide, suivez le modèle de programmation suivant:
- Appelez la méthode
dequeueInputImage()
. - Remplir les données dans le tampon d'entrée.
- Envoyez le tampon à l'appareil photo en appelant la méthode
queueInputImage()
.
Si vous utilisez un objet ImageWriter
avec une
PRIVATE
image, votre application ne peut pas y accéder
les données. Transmettez plutôt l'image PRIVATE
directement à la
ImageWriter
en appelant la méthode
Méthode queueInputImage()
sans aucune copie de tampon.
La classe ImageReader
prend désormais en charge
Flux d'images au format PRIVATE
. Cette prise en charge permet à votre application
conserver une file d'attente circulaire contenant ImageReader
images de sortie, sélectionnez-en une ou
plusieurs images et les envoyer au ImageWriter
pour le retraitement de l'appareil photo.
Fonctionnalités d'Android for Work
Cette version inclut les nouvelles API suivantes pour Android for Work:
- Commandes améliorées pour les appareils d'entreprise à usage unique:le propriétaire de l'appareil
peut désormais contrôler les paramètres suivants pour améliorer la gestion
Appareils COSU (détenus par l'entreprise, à usage unique) :
<ph type="x-smartling-placeholder">
- </ph>
- Désactivez ou réactivez la protection du clavier à l'aide de la
setKeyguardDisabled()
. - Désactivez ou réactivez la barre d'état (y compris les réglages rapides, les notifications et les
balayage vers le haut de la navigation qui lance Google Now) avec
setStatusBarDisabled()
. - Désactiver ou réactiver le démarrage sécurisé avec la constante
UserManager
DISALLOW_SAFE_BOOT
- Empêchez l’écran de s’éteindre lorsqu’il est branché à la
Constante
STAY_ON_WHILE_PLUGGED_IN
.
- Désactivez ou réactivez la protection du clavier à l'aide de la
- Installation et désinstallation silencieuses par le propriétaire de l'appareil:le propriétaire d'un appareil peut désormais
installer et désinstaller des applications en arrière-plan à l'aide de l'
PackageInstaller
de Google, indépendamment de Google Play for Work. Vous pouvez désormais provisionner des appareils par le biais d'un propriétaire d'appareil qui qui récupère et installe des applications sans intervention de l'utilisateur. Cette fonctionnalité est utile pour activer de kiosques ou autres sans activer de compte Google. - Accès silencieux aux certificats d'entreprise : lorsqu'une application appelle
choosePrivateKeyAlias()
, avant que l'utilisateur ne soit invité à sélectionner un certificat, le propriétaire du profil ou de l'appareil peut maintenant appeler leonChoosePrivateKeyAlias()
pour fournir l'alias en mode silencieux à l'application à l'origine de la demande. Cette fonctionnalité vous permet aux applications gérées l'accès aux certificats sans intervention de l'utilisateur. - Acceptation automatique des mises à jour du système. En définissant une règle de mise à
jour du système avec
setSystemUpdatePolicy()
, le propriétaire d'un appareil peut désormais accepter automatiquement un système (par exemple, sur un appareil en mode Kiosque), ou bien repousser la mise à jour et empêcher qu'elle ne soit prises par l'utilisateur pendant 30 jours maximum. De plus, un administrateur peut définir une fenêtre horaire quotidienne dans nécessitant une mise à jour, par exemple pendant les heures où un appareil en mode kiosque n'est pas utilisé. Quand ? une mise à jour du système est disponible, le système vérifie si l'application de contrôle des règles relatives aux appareils a défini règle de mise à jour et se comporte en conséquence. -
Installation de certificat délégué:un propriétaire de profil ou d'appareil peut désormais accorder un
à une application tierce la possibilité d'appeler ce certificat
DevicePolicyManager
. de gestion des API: <ph type="x-smartling-placeholder"> - Suivi de l'utilisation des données. Un propriétaire de profil ou d'appareil peut désormais envoyer une requête
statistiques de consommation des données visibles dans Paramètres > de consommation des données à l'aide du nouveau
NetworkStatsManager
. Les propriétaires de profil bénéficient automatiquement l'autorisation d'interroger les données du profil qu'il gère, tandis que les propriétaires de l'appareil ont accès aux données d'utilisation de l'utilisateur principal géré. - Gestion des autorisations d'exécution:
Un profil ou un propriétaire d'appareil peut définir une règle d'autorisation pour toutes les requêtes d'exécution de toutes les applications utilisant
setPermissionPolicy()
, pour inviter l'utilisateur à accorder l'autorisation, ou accorder automatiquement ou refuser l'autorisation silencieusement. Si cette dernière règle est configurée, l'utilisateur ne peut pas modifier la sélection effectuée par le propriétaire du profil ou de l'appareil sur l'écran des autorisations de l'application dans Paramètres : - VPN dans les paramètres:les applications de VPN sont désormais visibles dans Paramètres > Plus > VPN De plus, les notifications qui accompagnent l'utilisation d'un VPN sont maintenant spécifiques à la façon dont ce VPN configuré. Pour le propriétaire de profil, les notifications sont spécifiques à la configuration du VPN, pour un profil géré, un profil personnel ou les deux. Pour un propriétaire d'appareil, les notifications sont spécifiques à la configuration du VPN pour l'ensemble de l'appareil.
- Notification d'état du travail:une icône en forme de porte-documents apparaît désormais dans la barre d'état à chaque fois une application du profil géré a une activité au premier plan. De plus, si l'appareil est déverrouillé directement à l'activité d'une application dans le profil géré, un toast s'affiche pour informer à l'utilisateur qu'il se trouve dans le profil professionnel.