API Android 6.0

Android 6.0 (M) offre de nouvelles fonctionnalités aux utilisateurs et aux développeurs d'applications. Ce document présente les API les plus importantes.

Premiers pas

Pour commencer à créer des applications pour Android 6.0, vous devez d'abord obtenir le SDK Android. Utilisez ensuite le SDK Manager pour télécharger la plate-forme et les images système du SDK Android 6.0.

Mettre à jour votre niveau d'API cible

Pour mieux optimiser votre application pour les appareils fonctionnant sous Android, définissez targetSdkVersion sur "23", installez votre application sur une image système Android, testez-la, puis publiez l'application mise à jour avec cette modification.

Vous pouvez utiliser les API Android tout en prenant en charge les anciennes versions en ajoutant à votre code des conditions qui vérifient le niveau d'API du système avant d'exécuter les API non compatibles avec votre minSdkVersion. Pour en savoir plus sur la rétrocompatibilité, consultez Compatibilité avec différentes versions de plate-forme.

Pour en savoir plus sur le fonctionnement des niveaux d'API, consultez Qu'est-ce que le niveau d'API ?

Authentification par empreinte digitale

Cette version propose de nouvelles API qui vous permettent d'authentifier les utilisateurs à l'aide de leur empreinte digitale sur les appareils compatibles. Utilisez ces API en association avec le système Android Keystore.

Pour authentifier les utilisateurs à l'aide d'une empreinte digitale, obtenez une instance de la nouvelle classe FingerprintManager et appelez la méthode authenticate(). Votre application doit s'exécuter sur un appareil compatible doté d'un capteur d'empreinte digitale. Vous devez implémenter l'interface utilisateur pour le flux d'authentification par empreinte digitale dans votre application et utiliser l'icône d'empreinte digitale Android standard dans votre UI. L'icône d'empreinte digitale Android (c_fp_40px.png) est incluse dans l'exemple d'authentification biométrique. Si vous développez plusieurs applications qui utilisent l'authentification par empreinte digitale, notez que chaque application doit authentifier l'empreinte digitale de l'utilisateur de manière indépendante.

Pour utiliser cette fonctionnalité dans votre application, ajoutez d'abord l'autorisation USE_FINGERPRINT dans votre fichier manifeste.

<uses-permission
        android:name="android.permission.USE_FINGERPRINT" />
Mobile affichant la fonctionnalité d'authentification par empreinte digitale

Pour voir une implémentation de l'authentification par empreinte digitale dans une application, consultez l'exemple d'authentification biométrique. Pour voir comment utiliser ces API d'authentification avec d'autres API Android, consultez la vidéo API d'empreinte digitale et de paiement.

Si vous testez cette fonctionnalité, procédez comme suit :

  1. Si ce n'est pas déjà fait, installez la révision 24.3 d'Android SDK Tools.
  2. Enregistrez une nouvelle empreinte digitale dans l'émulateur en accédant à Settings > Security > Fingerprint (Paramètres > Sécurité > Empreinte digitale), puis suivez les instructions d'enregistrement.
  3. Utilisez un émulateur pour simuler 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>, puis finger touch <finger_id>.

Confirmer l'identifiant

Votre application peut authentifier les utilisateurs en fonction de la date à laquelle ils ont déverrouillé leur appareil pour la dernière fois. Cette fonctionnalité permet aux utilisateurs de ne pas avoir à mémoriser des mots de passe supplémentaires spécifiques à l'application et vous évite d'avoir à implémenter votre propre interface utilisateur d'authentification. Votre application doit utiliser cette fonctionnalité en association avec une implémentation de clé publique ou secrète pour l'authentification des utilisateurs.

Pour définir la durée du délai avant expiration pendant lequel la même clé peut être réutilisée après l'authentification d'un utilisateur, appelez la nouvelle méthode setUserAuthenticationValidityDurationSeconds() lorsque vous configurez un KeyGenerator ou un KeyPairGenerator.

Évitez d'afficher la boîte de dialogue de réauthentification de manière excessive. Vos applications doivent d'abord essayer d'utiliser l'objet cryptographique. Si le délai expire, utilisez la méthode createConfirmDeviceCredentialIntent() pour réauthentifier l'utilisateur dans votre application.

Association d'applications

Cette version améliore le système d'intent d'Android en fournissant une association d'applications plus performante. Cette fonctionnalité vous permet d'associer une application à un domaine Web qui vous appartient. Grâce à cette association, la plate-forme peut déterminer l'application par défaut à utiliser pour gérer un lien Web spécifique et éviter d'inviter les utilisateurs à sélectionner une application. Pour savoir comment implémenter cette fonctionnalité, consultez Gestion des liens d'application.

Sauvegarde automatique des applications

Le système effectue désormais une sauvegarde et une restauration complètes et automatiques 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, leurs données de sauvegarde sont également supprimées. Pour en savoir plus sur le fonctionnement de cette fonctionnalité et sur la configuration des éléments à sauvegarder dans le système de fichiers, consultez Configurer la sauvegarde automatique pour les applications.

Partage direct

Partie inférieure d'un mobile affichant la fonctionnalité Partage direct

Cette version vous fournit des API permettant aux utilisateurs de partager des contenus de manière intuitive et rapide. Vous pouvez désormais définir des cibles de partage direct qui lancent une activité spécifique dans votre application. Ces cibles de partage direct sont proposées aux utilisateurs dans le menu Partager. Cette fonctionnalité permet aux utilisateurs de partager du contenu avec des cibles, telles que des contacts, dans 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 ami ou une communauté spécifique dans cette application.

Pour activer les cibles de partage direct, vous devez définir une classe qui étend la classe ChooserTargetService. Déclarez votre service dans le fichier manifeste. Dans cette déclaration, spécifiez l'autorisation BIND_CHOOSER_TARGET_SERVICE et un filtre d'intent à l'aide de l'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 un élément <meta-data> avec le nom "android.service.chooser.chooser_target_service" dans le fichier manifeste d'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 fournit une nouvelle API d'interaction vocale qui, associée aux actions vocales, vous permet de créer des expériences vocales conversationnelles dans vos applications. Appelez la méthode isVoiceInteraction() pour déterminer si une action vocale a déclenché votre activité. Si c'est le cas, votre application peut utiliser la classe VoiceInteractor pour demander une confirmation vocale à l'utilisateur, faire son choix dans une liste d'options, etc.

La plupart des interactions vocales proviennent d'une action vocale de l'utilisateur. Toutefois, une activité d'interaction vocale peut également démarrer sans entrée utilisateur. Par exemple, une autre application lancée par le biais d'une interaction vocale peut également envoyer un intent pour lancer une interaction vocale. Pour déterminer si votre activité a été lancée à partir d'une requête vocale de l'utilisateur ou d'une autre application d'interaction vocale, appelez la méthode isVoiceInteractionRoot(). Si une autre application a lancé votre activité, la méthode renvoie false. Votre application peut alors inviter l'utilisateur à confirmer qu'il souhaitait effectuer cette action.

Pour en savoir plus sur l'implémentation des actions vocales, consultez le site pour les développeurs d'actions vocales.

API Assist

Cette version offre aux utilisateurs une nouvelle façon d'interagir avec vos applications grâce à un assistant. Pour utiliser cette fonctionnalité, l'utilisateur doit autoriser l'assistant à utiliser le contexte actuel. Une fois activé, l'utilisateur peut 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 l'indicateur FLAG_SECURE. En plus de l'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 un contexte supplémentaire à partir de votre application, procédez comme suit :

  1. Implémentez l'interface Application.OnProvideAssistDataListener.
  2. Enregistrez cet écouteur à l'aide de registerOnProvideAssistDataListener().
  3. Pour fournir des informations contextuelles spécifiques à l'activité, remplacez le rappel onProvideAssistData() et, éventuellement, le nouveau rappel onProvideAssistContent().

Appareils de stockage adoptables

Avec cette version, les utilisateurs peuvent adopter des périphériques de stockage externes tels que des cartes SD. L'adoption d'un périphérique de stockage externe chiffre et formate le périphérique pour qu'il se comporte comme une mémoire de stockage interne. Cette fonctionnalité permet aux utilisateurs de déplacer des applications et leurs données privées entre des périphériques de stockage. Lorsque vous déplacez des applications, le système respecte la préférence 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 changeront de manière dynamique lorsque l'application sera déplacée entre des périphériques de stockage interne et externe. Lorsque vous créez des chemins d'accès aux fichiers, il est fortement recommandé d'appeler ces API de manière dynamique. N'utilisez pas de chemins d'accès codés en dur ni de chemins d'accès complets persistants créés précédemment.

Pour déboguer cette fonctionnalité, vous pouvez activer l'adoption d'une clé USB connectée à 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 d'API suivantes pour les notifications :

Prise en charge des stylets Bluetooth

Cette version offre une meilleure prise en charge de l'entrée utilisateur à l'aide d'un stylet Bluetooth. Les utilisateurs peuvent associer et connecter un stylet Bluetooth compatible à leur téléphone ou leur tablette. Lorsqu'il est connecté, les informations de position de l'écran tactile sont fusionnées avec les informations de pression et de bouton du stylet pour offrir une plus grande gamme d'expression qu'avec l'écran tactile seul. Votre application peut écouter les pressions sur le bouton du stylet et effectuer des actions secondaires en enregistrant les objets View.OnContextClickListener et GestureDetector.OnContextClickListener dans votre activité.

Utilisez les méthodes et les constantes MotionEvent pour détecter les interactions avec le bouton du stylet :

Amélioration de la recherche Bluetooth à basse consommation

Si votre application effectue des analyses Bluetooth à basse consommation, utilisez la nouvelle méthode setCallbackType() pour spécifier que vous souhaitez que le système notifie les rappels lorsqu'il trouve pour la première fois, ou voit après une longue période, un paquet publicitaire correspondant au ScanFilter défini. Cette approche d'analyse est plus économe en énergie que celle fournie dans la version précédente de la plate-forme.

Compatibilité avec 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. Pour provisionner des identifiants Hotspot 2.0 dans votre application, utilisez les nouvelles méthodes de la classe WifiEnterpriseConfig, telles que setPlmn() et setRealm(). Dans l'objet WifiConfiguration, vous pouvez définir les champs FQDN et providerFriendlyName. La nouvelle méthode isPasspointNetwork() indique si un réseau détecté représente un point d'accès Hotspot 2.0.

Mode d'affichage 4K

La plate-forme permet désormais aux applications de demander à ce que la résolution d'affichage soit mise à niveau vers le rendu 4K sur le matériel compatible. Pour interroger la résolution physique actuelle, utilisez les nouvelles API Display.Mode. Si l'UI est dessinée à une résolution logique inférieure et mise à l'échelle à une résolution physique supérieure, sachez que la résolution physique renvoyée par la méthode getPhysicalWidth() peut différer de la résolution logique 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 de la fenêtre de votre application. Cette fonctionnalité est utile si vous souhaitez passer à une résolution d'affichage 4K. En mode d'affichage 4K, l'UI continue d'être affichée à la résolution d'origine (par exemple, 1080p) et est mise à l'échelle en 4K, mais les objets SurfaceView peuvent afficher le contenu à la résolution native.

Themeable ColorStateLists

Les attributs de thème sont désormais compatibles avec ColorStateList pour les appareils équipés d'Android 6.0 (niveau d'API 23). Les méthodes Resources.getColorStateList() et Resources.getColor() ont été abandonnées. Si vous appelez ces API, appelez plutôt les nouvelles méthodes Context.getColorStateList() ou Context.getColor(). Ces méthodes sont également disponibles dans la bibliothèque appcompat v4 via ContextCompat.

Fonctionnalités audio

Cette version apporte des améliorations au traitement audio sur Android, y compris :

  • Prise en charge du protocole MIDI avec les nouvelles API android.media.midi. Utilisez ces API pour envoyer et recevoir des événements MIDI.
  • Nouvelles classes AudioRecord.Builder et AudioTrack.Builder pour créer respectivement des objets de capture et de lecture audio numérique, et configurer les propriétés de source et de récepteur audio pour remplacer les paramètres système par défaut.
  • Crochets 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 rappel onSearchRequested() lorsque l'utilisateur lance une recherche. Pour déterminer si le périphérique d'entrée de l'utilisateur dispose d'un micro intégré, récupérez l'objet InputDevice à partir de ce rappel, puis appelez la nouvelle méthode hasMicrophone().
  • Nouvelle méthode getDevices() qui vous permet de récupérer la liste de tous les appareils audio actuellement connectés au système. Vous pouvez également enregistrer un objet AudioDeviceCallback si vous souhaitez que le système avertisse 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 les flux audio et vidéo. Les tampons audio sont envoyés de manière non bloquante et renvoyés via un rappel. Il est également compatible avec la vitesse de lecture dynamique.
  • Nouvel événement EVENT_SESSION_RECLAIMED, qui indique qu'une session 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 veiller à ne pas utiliser de 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. Avec cette exception, le codec doit être libéré, car il est passé à l'état terminal.
  • Nouvelle interface getMaxSupportedInstances() permettant d'obtenir un indice sur le nombre maximal d'instances de codec simultanées compatibles.
  • Nouvelle méthode setPlaybackParams() pour définir la vitesse de lecture du contenu multimédia pour la lecture en accéléré ou au ralenti. Il étire ou accélère également la lecture audio automatiquement 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 torche de l'appareil photo et pour le 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() pour activer ou désactiver le mode lampe torche du flash sans ouvrir l'appareil photo. L'application n'est pas propriétaire exclusif du flash ni de l'appareil photo. Le mode lampe de poche est désactivé et devient indisponible chaque fois que l'appareil photo devient indisponible ou que d'autres ressources de l'appareil photo qui maintiennent la lampe de poche allumée deviennent indisponibles. D'autres applications peuvent également appeler setTorchMode() pour désactiver le mode lampe torche. Lorsque la dernière application qui a activé le mode Lampe torche est fermée, ce mode est désactivé.

Vous pouvez enregistrer un rappel pour être informé de l'état du mode lampe torche en appelant la méthode registerTorchCallback(). La première fois que le rappel est enregistré, il est immédiatement appelé avec l'état du mode lampe torche de tous les appareils photo actuellement connus avec un flash. Si le mode lampe torche est activé ou désactivé, la méthode onTorchModeChanged() est appelée.

API de retraitement

L'API Camera2 est étendue pour prendre en charge le retraitement des images au format YUV et au format opaque privé. Pour déterminer si ces fonctionnalités de retraitement sont disponibles, appelez getCameraCharacteristics() et recherchez la clé REPROCESS_MAX_CAPTURE_STALL. Si un appareil est compatible avec le retraitement, vous pouvez créer une session de capture de caméra retraitable en appelant createReprocessableCaptureSession() et créer des requêtes pour le retraitement du tampon d'entrée.

Utilisez la classe ImageWriter pour connecter le flux du tampon d'entrée à l'entrée de retraitement de l'appareil photo. Pour obtenir un tampon vide, suivez ce modèle de programmation :

  1. Appelez la méthode dequeueInputImage().
  2. Remplissez le tampon d'entrée avec les données.
  3. Envoyez le tampon à la caméra en appelant la méthode queueInputImage().

Si vous utilisez un objet ImageWriter avec une image PRIVATE, votre application ne peut pas accéder directement aux données de l'image. Au lieu de cela, transmettez l'image PRIVATE directement à ImageWriter en appelant la méthode queueInputImage() sans copie de tampon.

La classe ImageReader est désormais compatible avec les flux d'images au format PRIVATE. Cette prise en charge permet à votre application de gérer une file d'attente circulaire d'images de sortie ImageReader, de sélectionner une ou plusieurs images et de les envoyer à ImageWriter pour le retraitement par la caméra.

Fonctionnalités Android for Work

Cette version inclut les nouvelles API Android for Work suivantes :

  • Commandes améliorées pour les appareils appartenant à l'entreprise et à usage unique : le propriétaire de l'appareil peut désormais contrôler les paramètres suivants pour mieux gérer les appareils appartenant à l'entreprise et à usage unique (COSU) :
    • Désactivez ou réactivez le keyguard avec la méthode setKeyguardDisabled().
    • Désactivez ou réactivez la barre d'état (y compris les paramètres rapides, les notifications et le geste de balayage vers le haut pour la navigation qui lance Google Now) avec la méthode setStatusBarDisabled().
    • Désactivez ou réactivez le démarrage sécurisé avec la constante UserManagerDISALLOW_SAFE_BOOT.
    • Empêchez l'écran de s'éteindre lorsqu'il est branché avec la constante STAY_ON_WHILE_PLUGGED_IN.
  • Installation et désinstallation silencieuses d'applications par le propriétaire de l'appareil : un propriétaire de l'appareil peut désormais installer et désinstaller des applications de manière silencieuse à l'aide des API PackageInstaller, indépendamment de Google Play for Work. Vous pouvez désormais provisionner des appareils via un propriétaire de l'appareil qui récupère et installe des applications sans intervention de l'utilisateur. Cette fonctionnalité est utile pour activer le provisionnement en un clic des kiosques ou d'autres appareils de ce type 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 désormais appeler la méthode onChoosePrivateKeyAlias() pour fournir l'alias de manière silencieuse à l'application qui en fait la demande. Cette fonctionnalité vous permet d'accorder aux applications gérées l'accès aux certificats sans intervention de l'utilisateur.
  • Acceptation automatique des mises à jour système : En définissant une règle de mise à jour du système avec setSystemUpdatePolicy(), un propriétaire de l'appareil peut désormais accepter automatiquement une mise à jour du système, par exemple dans le cas d'un appareil kiosque, ou reporter la mise à jour et empêcher l'utilisateur de l'effectuer pendant 30 jours maximum. De plus, un administrateur peut définir une plage horaire quotidienne pendant laquelle une mise à jour doit être effectuée, par exemple pendant les heures où un appareil kiosque n'est pas utilisé. Lorsqu'une mise à jour du système est disponible, le système vérifie si l'application Device Policy Controller a défini une règle de mise à jour du système et se comporte en conséquence.
  • Installation de certificats déléguée : un propriétaire de profil ou d'appareil peut désormais autoriser une application tierce à appeler les API de gestion de certificats DevicePolicyManager suivantes :
  • Mobile affichant la fonctionnalité de notification de l'état du travail dans Android for Work
  • Suivi de la consommation des données : Un propriétaire de profil ou d'appareil peut désormais interroger les statistiques de consommation des données visibles dans Paramètres > Utilisation des données à l'aide des nouvelles méthodes NetworkStatsManager. Les propriétaires de profil sont automatiquement autorisés à interroger les données du profil qu'ils gèrent, tandis que les propriétaires d'appareil ont accès aux données d'utilisation de l'utilisateur principal géré.
  • Gestion des autorisations d'exécution :

    Un propriétaire de profil ou d'appareil peut définir une règle d'autorisation pour toutes les demandes d'exécution de toutes les applications à l'aide de setPermissionPolicy(), afin d'inviter l'utilisateur à accorder l'autorisation ou de l'accorder ou de la refuser automatiquement et silencieusement. Si cette dernière règle est définie, 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 VPN sont désormais visibles dans Paramètres > Plus > VPN. De plus, les notifications qui accompagnent l'utilisation du VPN sont désormais spécifiques à la configuration de ce VPN. Pour le propriétaire du profil, les notifications indiquent si le VPN est configuré pour un profil géré, un profil personnel ou les deux. Pour un propriétaire de l'appareil, les notifications dépendent de la configuration du VPN pour l'ensemble de l'appareil.
  • Notification d'état professionnel : une icône en forme de porte-documents s'affiche désormais dans la barre d'état chaque fois qu'une application du profil géré a une activité au premier plan. De plus, si l'appareil est déverrouillé directement sur 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.