API Android 6.0

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" />
Mobile affichant la fonctionnalité d&#39;authentification par empreinte digitale

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:

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

Partie inférieure d&#39;un mobile affichant la fonctionnalité de 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:

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

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.

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:

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:

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 et AudioTrack.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'objet InputDevice de ce rappel, puis appelez la fonction Nouvelle méthode hasMicrophone().
  • 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 un 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 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:

  1. Appelez la méthode dequeueInputImage().
  2. Remplir les données dans le 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 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.
  • 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 le onChoosePrivateKeyAlias() 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">
  • Mobile affichant la fonctionnalité de notification de l&#39;état du travail dans Android for Work
  • 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.