API Android 6.0

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

Premiers pas en tant que développeur

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

Mettre à jour votre niveau d'API cible

Afin d'optimiser votre application pour les appareils équipés d'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 système avant d'exécuter des API non compatibles avec votre minSdkVersion. Pour en savoir plus sur la gestion de la rétrocompatibilité, consultez la page 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 pour vous permettre d'authentifier les utilisateurs en utilisant leurs empreintes digitales sur les appareils compatibles. Utilisez ces API conjointement avec le système Android Keystore.

Pour authentifier les utilisateurs via le scan d'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 équipé d'un lecteur 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 Android standard dans votre UI. L'icône d'empreinte 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 de l'utilisateur de manière indépendante.

Pour utiliser cette fonctionnalité dans votre application, commencez par ajouter l'autorisation USE_FINGERPRINT dans votre fichier manifeste.

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

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

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

  1. Si vous ne l'avez pas déjà fait, installez la révision 24.3 de SDK Tools pour Android.
  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 émuler les événements tactiles d'une empreinte digitale à l'aide de la commande suivante. Utilisez la même commande pour émuler les événements tactiles de l'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> suivi de 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é évite aux utilisateurs d'avoir à mémoriser des mots de passe supplémentaires spécifiques à des applications et vous évite d'implémenter votre propre interface utilisateur d'authentification. Votre application doit utiliser cette fonctionnalité conjointement avec une implémentation de clé publique ou secrète pour l'authentification des utilisateurs.

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

Évitez d'afficher trop de boîte de dialogue de réauthentification. 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'intention d'Android en fournissant des liens d'applications plus performants. Cette fonctionnalité vous permet d'associer une application à un domaine Web dont vous êtes propriétaire. En fonction de cette association, la plate-forme peut déterminer l'application par défaut à utiliser pour gérer un lien Web particulier et éviter d'inviter les utilisateurs à sélectionner une application. Pour découvrir 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 complète et une restauration automatiques des données pour les applications. Votre application doit cibler Android 6.0 (niveau d'API 23) pour permettre 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 cette fonctionnalité et découvrir comment configurer les éléments à sauvegarder dans le système de fichiers, consultez l'article Configurer la sauvegarde automatique des applications.

Partage direct

Section inférieure d&#39;un mobile affichant la fonctionnalité de partage direct

Cette version fournit des API qui rendent le partage intuitif et rapide pour les utilisateurs. 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 exposées aux utilisateurs via le menu Partager. Cette fonctionnalité permet aux utilisateurs de partager du contenu avec des cibles, telles que des contacts, au sein d'autres applications. Par exemple, la cible du 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 le 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> nommé "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 fournit une nouvelle API d'interaction vocale qui, associée aux commandes vocales, vous permet de créer des expériences vocales conversationnelles dans vos applications. Appelez la méthode isVoiceInteraction() pour déterminer si une commande vocale a déclenché votre activité. Si tel 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 commande vocale de l'utilisateur. Cependant, une activité d'interaction vocale peut également commencer sans entrée utilisateur. Par exemple, une autre application lancée via 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 ensuite inviter l'utilisateur à confirmer qu'il souhaitait effectuer cette action.

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

API Assist

Cette version offre aux utilisateurs une nouvelle façon d'interagir avec vos applications via un assistant. Pour utiliser cette fonctionnalité, l'utilisateur doit permettre à l'Assistant d'utiliser le contexte actuel. Une fois la fonctionnalité activée, 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 plus de contexte concernant votre application, procédez comme suit:

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

Périphériques de stockage adoptables

Avec cette version, les utilisateurs peuvent utiliser 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 l'appareil pour qu'il se comporte comme une mémoire de stockage interne. Cette fonctionnalité permet aux utilisateurs de déplacer à la fois les applications et les données privées de ces applications entre des appareils 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 qu'elles renvoient changent de manière dynamique lorsque l'application est déplacée entre des périphériques de stockage internes et externes. 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 aux fichiers codés en dur et ne conservez pas les chemins d'accès complets 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 suivantes à l'API pour les notifications:

Compatible avec les 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. Lorsque la connexion est établie, les informations de position de l'écran tactile sont fusionnées avec les informations sur la pression et les boutons du stylet pour fournir une plus grande plage d'expression qu'avec l'écran tactile seul. Votre application peut écouter les pressions sur les boutons du stylet et effectuer des actions secondaires, en enregistrant des objets View.OnContextClickListener et GestureDetector.OnContextClickListener dans votre activité.

Utilisez les méthodes et 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 indiquer que vous souhaitez que le système notifie les rappels lorsqu'il trouve pour la première fois ou voit après un long moment un paquet d'annonces correspondant au ScanFilter défini. Cette approche de l'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 les spécifications du point d'accès 2.0 version 1 sur les appareils Nexus 6 et Nexus 9. Pour provisionner les identifiants du point d'accès 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 du point d'accès 2.0.

Mode d'affichage 4K

La plate-forme permet désormais aux applications de demander à ce que la résolution de l'écran 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'interface utilisateur est dessinée avec une résolution logique inférieure et mise à l'échelle pour une résolution physique plus importante, sachez que la résolution physique renvoyée par la méthode getPhysicalWidth() peut être différente de la résolution logique indiquée par getSize().

Vous pouvez demander au système de modifier la résolution physique de votre application lors de 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'écran 4K. En mode d'affichage 4K, l'interface utilisateur continue d'être affichée dans la résolution d'origine (par exemple, 1080p) et est améliorée au format 4K, mais les objets SurfaceView peuvent afficher du contenu dans la résolution native.

ColorStateLists pouvant être associés à un thème

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). 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:

  • Compatibilité avec le protocole MIDI et 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ériques, et configurer les propriétés de la source audio et du récepteur pour remplacer les valeurs par défaut du système.
  • 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ées à 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 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 permet aux applications d'afficher des flux audio et vidéo de manière synchrone. Les tampons audio sont envoyés de manière non bloquante et sont renvoyés via un rappel. Il prend également en charge 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 vous assurer de 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. À cette exception, le codec doit être libéré, car il est passé à l'état final.
  • Nouvelle interface getMaxSupportedInstances() pour obtenir un indice sur le nombre maximal d'instances de codec simultanées compatibles.
  • Ajout d'une méthode setPlaybackParams() permettant de définir la vitesse de lecture des contenus multimédias pour la lecture rapide ou au ralenti. Elle étire ou accélère également la lecture audio 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 retraiter les images de l'appareil photo:

API Flashlight

Si un appareil photo dispose d'un flash, vous pouvez appeler la méthode setTorchMode() pour activer ou désactiver le mode de lampe de poche de l'appareil photo sans ouvrir l'appareil photo. L'application n'est pas propriétaire exclusive du flash ou de l'appareil photo. Le mode de lampe de poche est désactivé et devient indisponible chaque fois que la caméra devient indisponible ou lorsque d'autres ressources de caméra qui laissent la lampe de poche allumée ne sont plus disponibles. D'autres applications peuvent également appeler setTorchMode() pour désactiver le mode lampe de poche. Lorsque la dernière application qui a activé le mode lampe de poche est fermée, ce mode 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 l'état du mode lampe de poche de tous les appareils photo actuellement connus dotés d'un flash. Si le mode de lampe de poche est activé ou désactivé, la méthode onTorchModeChanged() est appelée.

API de retraitement

L'API Camera2 est étendue pour accepter le format YUV et le retraitement d'images 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 pouvant être retraitée en appelant createReprocessableCaptureSession(), puis créer des requêtes de 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 les données du tampon d'entrée.
  3. Envoyez le tampon à l'appareil photo 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. Transmettez plutôt l'image PRIVATE directement à ImageWriter en appelant la méthode queueInputImage() sans copie de tampon.

La classe ImageReader accepte désormais les flux d'images au format PRIVATE. Cette prise en charge permet à votre application de conserver une file d'attente circulaire d'images de sortie ImageReader, de sélectionner une ou plusieurs images et de les envoyer à ImageWriter pour un nouveau traitement par l'appareil photo.

Fonctionnalités Android for Work

Cette version inclut les nouvelles API pour Android for Work suivantes:

  • Commandes améliorées pour les appareils à usage unique appartenant à l'entreprise:le propriétaire de l'appareil peut désormais contrôler les paramètres suivants pour améliorer la gestion des appareils COSU (détenus par l'entreprise, à usage unique) :
    • Désactivez ou réactivez le verrouillage du clavier à l'aide de 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 de navigation vers le haut qui lance Google Now) avec la méthode setStatusBarDisabled().
    • Désactivez ou réactivez le démarrage sécurisé avec la constante UserManager DISALLOW_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 d'appareil peut désormais installer et désinstaller des applications en mode silencieux à l'aide des API PackageInstaller, indépendamment de Google Play for Work. Vous pouvez désormais provisionner des appareils via un propriétaire d'appareil qui récupère et installe des applications sans intervention de l'utilisateur. Cette fonctionnalité est utile pour activer le provisionnement en un seul geste de 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 en mode silencieux à l'application à l'origine de 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 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 une mise à jour du système, par exemple dans le cas d'un appareil en mode 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 un intervalle de temps quotidien pendant lequel une mise à jour doit être effectuée, par exemple pendant les heures où un appareil en mode kiosque n'est pas utilisé. Lorsqu'une mise à jour du système est disponible, le système vérifie si l'outil de contrôle des règles relatives aux appareils a défini une règle de mise à jour du système et se comporte en conséquence.
  • Installation de certificats délégués:un propriétaire de profil ou d'appareil peut désormais autoriser une application tierce à appeler les API de gestion des certificats DevicePolicyManager suivantes :
  • Mobile affichant la fonctionnalité de notification d&#39;état professionnel 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'appareils 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 requêtes d'exécution de toutes les applications utilisant setPermissionPolicy(), afin d'inviter l'utilisateur à accorder l'autorisation, ou d'accorder ou de refuser automatiquement l'autorisation en mode silencieux. 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 Settings (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 d'un VPN sont désormais spécifiques à la configuration de ce VPN. Pour le propriétaire de profil, les notifications varient selon que le VPN est configuré pour un profil géré, un profil personnel ou les deux. Pour un propriétaire d'appareil, les notifications varient selon que le VPN est configuré ou non pour l'ensemble de l'appareil.
  • Notification d'état de la tâche:une icône en forme de mallette s'affiche désormais dans la barre d'état lorsqu'une application du profil géré présente 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 avertir l'utilisateur qu'il se trouve dans le profil professionnel.