API Android 5.0

Niveau d'API : 21

Android 5.0 (LOLLIPOP) propose de nouvelles fonctionnalités pour les utilisateurs et les développeurs d'applications. Ce document fournit une les nouvelles API les plus intéressantes.

Si vous avez publié une application, veillez à consulter les modifications de comportement d'Android 5.0 que vous devez prendre en compte dans votre application. Ces modifications de comportement peuvent affecter votre application sur les appareils Android 5.0, même si vous n'utilisez pas de nouvelles API ni ne ciblez pas de nouvelles fonctionnalités.

Pour obtenir un aperçu des nouvelles fonctionnalités de la plate-forme, consultez plutôt les principales caractéristiques d'Android Lollipop.

Premiers pas en tant que développeur

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

Mettre à jour votre niveau d'API cible

Afin d'optimiser votre application pour les appareils équipés d'Android 5.0, définir votre targetSdkVersion sur "21", installez votre application sur un appareil Android 5.0, la tester, puis publier l'application mise à jour avec ce changement.

Vous pouvez utiliser les API Android 5.0 tout en prenant en charge les versions antérieures 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 Prendre en charge 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 ?

Changements de comportement importants

Si vous avez déjà publié une application pour Android, sachez qu'elle peut être concernée par des modifications apportées à Android 5.0.

Pour en savoir plus, consultez Modifications apportées à Android 5.0.

Interface utilisateur

Compatibilité avec Material Design

Android 5.0 est désormais compatible avec le nouveau Material Design d'Android. du style. Vous pouvez créer des applications avec un design qui sont visuellement dynamiques et dynamiques. comportent des transitions d'éléments d'interface utilisateur qui semblent naturelles pour les utilisateurs. Cette assistance inclut les fonctionnalités suivantes:

  • Le thème Material
  • Afficher les ombres
  • Widget RecyclerView
  • Animation et effets de style drawable
  • Animations Material Design et effets de transition d'activité
  • Animateurs pour les propriétés de vue en fonction de l'état de la vue
  • Widgets d'UI et barres d'application personnalisables avec des palettes de couleurs que vous contrôlez
  • Drawables animés et non animés basés sur des graphiques vectoriels XML

Pour en savoir plus sur l'ajout de la fonctionnalité Material Design à votre application, consultez Material Design :

Documents et activités simultanés sur l'écran "Recents" (Éléments récents)

Dans les versions précédentes, écran récent ne pouvait afficher qu'une seule tâche pour chaque application avec laquelle l'utilisateur a interagi le plus récemment. Votre application peut désormais ouvrir plus de tâches si nécessaire pour des activités simultanées supplémentaires pour les documents. Cette fonctionnalité facilite le multitâche en permettant aux utilisateurs de basculer rapidement entre des activités et des documents individuels depuis l'écran "Recents" (Éléments récents), avec une expérience de bascule cohérente dans toutes les applications. Ces tâches simultanées peuvent inclure des onglets ouverts dans une application de navigateur Web, des documents dans une application de productivité, des matchs simultanés dans un jeu ou des chats dans une application de messagerie. Votre application peut gérer ses tâches via la classe ActivityManager.AppTask.

Pour insérer une coupure logique afin que le système traite votre activité comme une nouvelle tâche, utilisez FLAG_ACTIVITY_NEW_DOCUMENT lorsque vous lancez l'activité avec startActivity(). Vous pouvez également obtenir ce comportement en définissant l'attribut documentLaunchMode de l'élément <activity> sur "intoExisting" ou "always" dans votre fichier manifeste.

Pour éviter d'encombrer l'écran "Récents", vous pouvez définir le nombre maximal de tâches de votre application pouvant apparaître sur cet écran. Pour ce faire, définissez le paramètre <application> android:maxRecents. Le nombre maximal actuel pouvant être spécifié est de 50 tâches par utilisateur (25 pour les appareils à faible RAM).

Les tâches de l'écran "Récents" peuvent être définies pour persister après un redémarrage. Pour contrôler le comportement de persistance, utilisez android:persistableMode . Vous pouvez aussi modifier les propriétés visuelles d'une activité sur l'écran "Recents" (Actions récentes), telles que la couleur, le libellé et l'icône de l'activité, en appelant la méthode setTaskDescription() .

Mises à jour de WebView

Android 5.0 met à jour l'implémentation de WebView vers Chromium M37, ce qui améliore la sécurité et la stabilité, ainsi que corrige des bugs. La chaîne user-agent par défaut d'un WebView exécuté sur Android 5.0 a été mise à jour pour inclure 37.0.0.0 comme numéro de version.

Cette version introduit la classe PermissionRequest, qui permet à votre application d'accorder l'autorisation WebView pour accéder à des ressources protégées telles que l'appareil photo et le micro, via des API Web telles que getUserMedia(). Votre application doit disposer des autorisations Android appropriées pour ces ressources afin d'accorder les autorisations à WebView.

Avec la nouvelle méthode onShowFileChooser(), vous pouvez maintenant utiliser un champ de formulaire de saisie dans WebView, et lancer un sélecteur de fichier pour sélectionner des images et des fichiers à partir de l'appareil Android.

De plus, cette version est compatible avec les normes ouvertes WebAudio, WebGL et WebRTC. Pour en savoir plus sur les nouvelles fonctionnalités incluses dans cette version, consultez WebView pour Android.

Partage et capture d'écran

Android 5.0 vous permet d'ajouter des fonctionnalités de capture et de partage d'écran à votre application avec les nouvelles API android.media.projection. Cette fonctionnalité est utile, par exemple, si vous souhaitez activer le partage d'écran dans une application de visioconférence.

La nouvelle méthode createVirtualDisplay() permet à votre application de capturer le contenu de l'écran principal (l'option par défaut afficher) dans un objet Surface, que votre application peut ensuite envoyer sur le réseau. L'API n'autorise que la capture d'écran non sécurisé et non l'audio du système. Pour commencer la capture d'écran, votre application doit d'abord demander l'autorisation de l'utilisateur en lançant une boîte de dialogue de capture d'écran à l'aide d'un Intent obtenu via la méthode createScreenCaptureIntent().

Pour obtenir un exemple d'utilisation des nouvelles API, consultez le MediaProjectionDemo dans l'exemple de projet.

Notifications

Notifications sur l'écran de verrouillage

Les écrans de verrouillage d'Android 5.0 peuvent présenter des notifications. Les utilisateurs peuvent choisir d'autoriser ou non les utilisateurs dans les paramètres contenu de notification sensible à afficher sur un écran de verrouillage sécurisé.

Votre application peut contrôler le niveau de détail visible lorsque ses notifications sont affiché sur l'écran de verrouillage sécurisé. Pour contrôler le niveau de visibilité, appelez setVisibility() et spécifiez l'une des valeurs suivantes :

  • VISIBILITY_PRIVATE: Affiche des informations de base, telles que l'icône de la notification, mais masque le l'intégralité du contenu de la notification.
  • VISIBILITY_PUBLIC : affiche le contenu complet de la notification.
  • VISIBILITY_SECRET : rien n'est affiché, même pas l'icône de la notification.

Lorsque le niveau de visibilité est VISIBILITY_PRIVATE, vous pouvez également fournir une version masquée de la notification tout contenu qui masque les informations personnelles. Par exemple, une application de SMS peut afficher notification indiquant "Vous avez trois nouveaux SMS" mais le message est masqué le contenu et les expéditeurs. Pour fournir cette autre notification, vous devez d'abord créer la notification de remplacement avec Notification.Builder. Quand ? vous créez l'objet de notification privée, joignez la notification de remplacement via la setPublicVersion().

Métadonnées des notifications

Android 5.0 utilise les métadonnées associées aux notifications de votre application pour les trier de manière plus intelligente. Pour définir les métadonnées, appelez les méthodes suivantes dans Notification.Builder lorsque vous créez la notification :

  • setCategory(): indique au système comment gérer les notifications de votre application lorsque le l'appareil est en mode priorité (par exemple, si une notification représente appel entrant, message instantané ou alarme).
  • setPriority(): Marque la notification comme plus ou moins importante que les notifications normales. Les notifications dont le champ de priorité est défini sur PRIORITY_MAX ou PRIORITY_HIGH s'affichent dans une petite fenêtre flottante si elles sont également accompagnées d'un son ou d'une vibration.
  • addPerson() : permet d'ajouter une ou plusieurs personnes concernées par une notification. Votre application peut l'utiliser pour signaler au système qu'il doit regrouper les notifications des personnes spécifiées ou classer les notifications de ces personnes comme étant plus importantes.

Graphiques

Compatibilité avec OpenGL ES 3.1

Android 5.0 ajoute des interfaces Java et la prise en charge native d'OpenGL ES 3.1. Voici les principales nouvelles fonctionnalités d'OpenGL ES 3.1 :

  • Nuancheurs de calcul
  • Séparer les objets du nuanceur
  • Commandes de dessin indirect
  • Textures de plusieurs échantillons et pochoirs
  • Améliorations du langage de l'ombre
  • Extensions pour les modes de fusion avancés et le débogage
  • Rétrocompatibilité avec OpenGL ES 2.0 et 3.0

L'interface Java pour OpenGL ES 3.1 sur Android est fournie avec GLES31. Lorsque vous utilisez OpenGL ES 3.1, veillez à le déclarer dans votre fichier manifeste avec la balise <uses-feature> et l'attribut android:glEsVersion. Exemple :

<manifest>
    <uses-feature android:glEsVersion="0x00030001" />
    ...
</manifest>

Pour en savoir plus sur l'utilisation d'OpenGL ES, y compris sur la façon de vérifier la version d'OpenGL ES compatible de l'appareil au moment de l'exécution, consultez la Guide de l'API OpenGL ES

Pack d'extensions Android

En plus d'OpenGL ES 3.1, cette version fournit un pack d'extensions avec Interfaces Java et compatibilité native avec les fonctionnalités graphiques avancées. Ces les extensions sont traitées comme un seul package par Android. (Si l'extension ANDROID_extension_pack_es31a est présente, votre application peut supposer que toutes les extensions du package sont présentes et activer les fonctionnalités de langage de nuance avec une seule instruction #extension.)

Le pack d'extensions est compatible avec les éléments suivants :

  • Compatibilité garantie du nuanceur de fragments avec les tampons de stockage, les images et atomique (la compatibilité avec le nuanceur de fragments est facultative dans OpenGL ES 3.1)
  • Nuancheurs de tessellation et de géométrie
  • Format de compression de texture ASTC (LDR)
  • Interpolation et nuance par échantillon
  • Différents modes de mélange pour chaque attachement de couleur dans un tampon de trame

L'interface Java du pack d'extensions est fournie avec GLES31Ext Dans le fichier manifeste de votre application, vous pouvez déclarer que votre application ne doit être installée que sur les appareils compatibles avec le pack d'extensions. Exemple :

<manifest>
    <uses-feature android:name=“android.hardware.opengles.aep”
        android:required="true" />
    ...
</manifest>

Contenus multimédias

API Camera pour des fonctionnalités avancées de l'appareil photo

Android 5.0 présente le nouveau android.hardware.camera2 pour faciliter la capture photo et le traitement des images avec précision. Vous pouvez maintenant accéder de manière programmatique aux appareils photo disponibles pour le système avec getCameraIdList() et se connecter à un appareil spécifique avec openCamera() Pour commencer à prendre des photos, créez un CameraCaptureSession et spécifiez les objets Surface pour envoyer les images capturées. CameraCaptureSession peut être configuré pour prendre des photos uniques ou plusieurs images en rafale.

Pour être averti lorsque de nouvelles images sont capturées, implémentez la CameraCaptureSession.CaptureCallback écouteur et le définir dans votre demande de capture. Lorsque le système a terminé la demande de capture d'image, votre écouteur CameraCaptureSession.CaptureCallback reçoit un appel à onCaptureCompleted(), qui vous fournit les métadonnées de capture d'image dans un CaptureResult.

La classe CameraCharacteristics permet à votre application de détecter les fonctionnalités de l'appareil photo disponibles sur un appareil. L'objet La propriété INFO_SUPPORTED_HARDWARE_LEVEL représente le niveau de fonctionnalité de la caméra.

  • Tous les appareils sont compatibles avec au moins la Niveau de matériel INFO_SUPPORTED_HARDWARE_LEVEL_LEGACY, qui dispose de fonctionnalités à peu près équivalente à celle de Camera, qui est obsolète API.
  • Les appareils compatibles avec le niveau matériel INFO_SUPPORTED_HARDWARE_LEVEL_FULL peuvent contrôler manuellement la capture et le post-traitement, et capturer des images haute résolution à des fréquences d'images élevées.

Pour savoir comment utiliser l'API Camera mise à jour, consultez les exemples d'implémentation Camera2Basic et Camera2Video de cette version.

Lecture audio

Cette version inclut les modifications suivantes apportées à AudioTrack :

  • Votre application peut désormais fournir des données audio au format à virgule flottante (ENCODING_PCM_FLOAT). Ce permet une plus grande plage dynamique, une plus grande précision constante et une plus grande marge de progression. L'arithmétique à virgule flottante est particulièrement utile lors des calculs intermédiaires. Les points de terminaison de lecture utilisent un format entier pour les données audio, avec une profondeur de bits inférieure. (Dans Android 5.0, certaines parties du pipeline interne ne sont pas encore à virgule flottante).
  • Votre application peut désormais fournir des données audio en tant que ByteBuffer, dans au même format que celui fourni par MediaCodec.
  • WRITE_NON_BLOCKING peut simplifier la mise en mémoire tampon et le multithreading pour certaines applications.

Commandes de lecture multimédias

Utilisez les nouvelles API de notification et multimédias pour vous assurer que l'UI du système connaît votre lecture multimédia et peut extraire et afficher la pochette de l'album. Le contrôle de la lecture multimédia dans une UI et un service est désormais plus facile grâce aux nouvelles classes MediaSession et MediaController.

La nouvelle classe MediaSession remplace la classe obsolète RemoteControlClient et fournit ensemble unique de méthodes de rappel pour gérer les commandes de transport et les boutons multimédias Si votre application permet la lecture de contenus multimédias et s'exécute sur un TV ou plate-forme Wear, utilisez la MediaSession pour gérer votre transport à l'aide des mêmes méthodes de rappel.

Vous pouvez désormais créer votre propre application de contrôleur multimédia avec le nouveau MediaController. Cette classe fournit une solution thread-safe pour surveiller et contrôler la lecture des contenus multimédias à partir du processus d'UI de votre application. Lorsque vous créez un contrôleur, spécifiez un MediaSession.Token afin que votre application puisse interagir avec le MediaSession donné. À l'aide des méthodes MediaController.TransportControls, vous pouvez envoyer des commandes telles que play(), stop(), skipToNext() et setRating() pour contrôler la lecture multimédia de cette session. Avec le contrôleur, vous pouvez également enregistrer un objet MediaController.Callback pour écouter les métadonnées et les changements d'état de la session.

Vous pouvez aussi créer des notifications enrichies qui permettent de contrôler la lecture associée à une session multimédia avec le nouveau Notification.MediaStyle .

Navigation multimédia

Android 5.0 permet aux applications de parcourir le contenu multimédia. d'une autre application, via le nouveau android.media.browse API. Pour afficher le contenu multimédia dans votre application, étendez la MediaBrowserService. Votre implémentation de MediaBrowserService doit fournir un accès à un MediaSession.Token afin que les applications puissent lire les contenus multimédias fournis via votre service.

Pour interagir avec un service de navigateur multimédia, utilisez la classe MediaBrowser. Spécifiez le nom du composant pour un MediaSession lorsque vous créez une instance MediaBrowser. À l'aide de cette instance de navigateur, votre application peut alors se connecter au service associé et obtenir une MediaSession.Token objet pour lire le contenu exposé via ce service.

Stockage

Sélection du répertoire

Android 5.0 étend Framework d'accès au stockage pour permettre aux utilisateurs de sélectionner l'intégralité d'une sous-arborescence de répertoires, ce qui donne aux applications un accès en lecture/écriture à tous les documents qu'il contient sans exiger de confirmation de l'utilisateur pour chaque élément.

Pour sélectionner un sous-arbre de répertoire, créez et envoyez un intent OPEN_DOCUMENT_TREE. Le système affiche toutes les instances DocumentsProvider compatibles avec la sélection de sous-arbres, ce qui permet à l'utilisateur de parcourir et de sélectionner un répertoire. L'URI renvoyé représente l'accès à la sous-arborescence sélectionnée. Vous pouvez ensuite utiliser buildChildDocumentsUriUsingTree() et buildDocumentUriUsingTree() avec query() pour explorer le sous-arbre.

La nouvelle méthode createDocument() vous permet de créer des documents ou des répertoires n'importe où sous la sous-arborescence. Pour gérer des documents existants, utilisez renameDocument() et deleteDocument(). Vérifiez COLUMN_FLAGS pour vérifier que le fournisseur prend en charge ces appels avant de les émettre.

Si vous implémentez un DocumentsProvider et que vous souhaitez prendre en charge la sélection de sous-arbres, implémentez isChildDocument() et incluez FLAG_SUPPORTS_IS_CHILD dans votre COLUMN_FLAGS.

Android 5.0 introduit également de nouveaux répertoires spécifiques aux packages sur espace de stockage partagé dans lequel votre application peut placer des fichiers multimédias à inclure MediaStore Le nouveau getExternalMediaDirs() renvoie les chemins d'accès à ces répertoires sur tous les appareils de stockage partagés. Comme pour getExternalFilesDir(), votre application n'a besoin d'aucune autorisation supplémentaire pour accéder aux chemins renvoyés. La plate-forme recherche régulièrement de nouveaux contenus multimédias dans ces répertoires, mais vous pouvez également utiliser MediaScannerConnection pour rechercher explicitement de nouveaux contenus.

Sans fil et Connectivité

Connexions réseau multiples

Android 5.0 fournit de nouvelles API multiréseau qui permettent à votre application de rechercher de manière dynamique les réseaux disponibles avec des fonctionnalités spécifiques et d'établir une connexion avec eux. Cette fonctionnalité est utile lorsque votre application a besoin d'un réseau spécialisé, tel qu'un réseau SUPL, MMS ou un réseau de facturation par l'opérateur, ou si vous souhaitez envoyer des données en utilisant un type particulier de protocole de transport.

Pour sélectionner un réseau et vous y connecter de manière dynamique depuis votre application, procédez comme suit : étapes:

  1. Créez un élément ConnectivityManager.
  2. Utilisez la classe NetworkRequest.Builder pour créer une NetworkRequest et spécifier les fonctionnalités réseau et le type de transport qui intéresse votre application.
  3. Pour rechercher des réseaux adaptés, appelez requestNetwork() ou registerNetworkCallback(), puis transmettez l'objet NetworkRequest et une implémentation de ConnectivityManager.NetworkCallback. Utilisez la méthode requestNetwork() si vous souhaitez passer activement à un réseau approprié une fois qu'il a été détecté. Pour ne recevoir que des notifications pour les réseaux scannés sans passer activement, utilisez plutôt la méthode registerNetworkCallback().

Lorsque le système détecte un réseau approprié, il se connecte au réseau et appelle onAvailable() . Vous pouvez utiliser l'objet Network du rappel pour pour obtenir des informations supplémentaires sur le réseau, ou pour diriger le trafic vers le le réseau sélectionné.

Bluetooth à basse consommation

Android 4.3 est compatible avec la plate-forme Bluetooth à basse consommation (Bluetooth LE) au cœur du projet. Sous Android 5.0, un appareil Android peut désormais servir de périphérique Bluetooth LE. Les applications peuvent utiliser cette fonctionnalité pour signaler sa présence aux appareils à proximité. Par exemple, vous pouvez créer des applications qui permettent à un appareil de faire office de podomètre ou de suivi de l'état de santé, et de communiquer avec un autre appareil Bluetooth LE.

Les nouvelles API android.bluetooth.le permettent à vos applications de diffuser des publicités, rechercher des réponses et établir des connexions avec le Bluetooth à proximité appareils LE. Pour utiliser les nouvelles fonctionnalités de publicité et de numérisation, ajoutez l'autorisation BLUETOOTH_ADMIN dans votre fichier manifeste. Lorsque les utilisateurs mettent à jour ou téléchargent votre application depuis le Play Store, il est invité à accorder l'autorisation suivante à votre application: "Informations sur la connexion Bluetooth: permet à l'application de contrôler le Bluetooth, notamment pour diffuser des annonces ou obtenir des informations sur les appareils Bluetooth à proximité. »

Pour commencer la publicité Bluetooth LE afin que d'autres appareils puissent détecter votre application, appelez startAdvertising() et transmettez une implémentation de la classe AdvertiseCallback. L'objet de rappel reçoit un rapport du succès ou de l'échec de l'opération publicitaire.

Android 5.0 introduit la classe ScanFilter pour que vous puissiez que votre application ne puisse analyser que les les types d'appareils qui l'intéressent. Lancer la recherche Bluetooth Appareils LE, appeler le startScan() et transmettre une liste de filtres. Dans l'appel de méthode, vous devez également fournir une implémentation de ScanCallback pour signaler Annonce Bluetooth LE détectée.

Améliorations de la technologie NFC

Android 5.0 ajoute ces améliorations pour offrir des fonctionnalités Flexibilité de l'utilisation de la technologie NFC:

  • Android Beam est désormais disponible dans le menu Partager.
  • Votre application peut appeler Android Beam sur l'appareil de l'utilisateur pour partager des données en Appel de invokeBeam() en cours. L'utilisateur n'a donc pas besoin de placer manuellement l'appareil contre un autre appareil compatible avec la technologie NFC pour effectuer le transfert de données.
  • Vous pouvez utiliser la nouvelle méthode createTextRecord() pour créer un enregistrement NDEF contenant des données textuelles au format UTF-8.
  • Si vous développez une application de paiement, vous pouvez désormais d'enregistrer dynamiquement un identifiant d'application NFC (AID) en appelant registerAidsForService() Vous pouvez également utiliser setPreferredService() pour définir le service d'émulation de carte à utiliser de préférence lorsqu'une activité spécifique est au premier plan.

Projet Volta

En plus de ses nouvelles fonctionnalités, Android 5.0 met l'accent sur l'amélioration de l'autonomie de la batterie. Utilisez les nouveaux outils et API pour comprendre et optimiser la puissance de votre application leur consommation.

Planifier des tâches

Android 5.0 propose une nouvelle JobScheduler API qui vous permet d'optimiser l'autonomie de la batterie en définissant des tâches que le système doit exécuter de manière asynchrone par la suite ou dans des conditions spécifiques (par exemple, lorsque le l'appareil est en charge). La planification des tâches est utile dans les situations suivantes :

  • L'application comporte des tâches non visibles par l'utilisateur que vous pouvez reporter.
  • L'application doit effectuer des tâches que vous préférez effectuer lorsque l'appareil est branché.
  • L'application a une tâche qui nécessite un accès au réseau ou une connexion Wi-Fi .
  • L'application comporte un certain nombre de tâches que vous souhaitez exécuter par lot de manière régulière.

Une unité de travail est encapsulée par un objet JobInfo. Cet objet spécifie les critères de planification.

Utilisez la classe JobInfo.Builder pour configurer la manière dont planifiée doit s'exécuter. Vous pouvez planifier l'exécution de la tâche telles que:

  • Démarrer lorsque l'appareil est en charge
  • Démarrer lorsque l'appareil est connecté à un réseau sans compteur
  • Démarrer lorsque l'appareil est inactif
  • Terminer avant une certaine date limite ou avec un délai minimal

Par exemple, vous pouvez ajouter du code comme celui-ci pour exécuter votre tâche sur un réseau illimité:

Kotlin

val uploadTask: JobInfo = JobInfo.Builder(
        jobId,
        serviceComponent /* JobService component */
).run {
    setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
    build()
}
val jobScheduler = context.getSystemService(Context.JOB_SCHEDULER_SERVICE) as JobScheduler
jobScheduler.schedule(uploadTask)

Java

JobInfo uploadTask = new JobInfo.Builder(jobId,
                                         serviceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NETWORK_TYPE_UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

Si l'alimentation de l'appareil est stable (c'est-à-dire qu'il est branché depuis longtemps plus de 2 minutes et que la batterie est à un niveau sain), le système exécute toutes les tâches planifiées prêtes à être exécutées, même si le job date limite n'a pas expiré.

Pour voir un exemple d'utilisation de l'API JobScheduler, procédez comme suit : consultez l'exemple d'implémentation de JobSchedulerSample présenté dans cette version.

Outils pour les développeurs pour l'utilisation de la batterie

La nouvelle commande dumpsys batterystats génère des données statistiques sur l'utilisation de la batterie sur un appareil, organisées par ID utilisateur unique (UID). Les statistiques comprennent les éléments suivants:

  • Historique des événements liés à la batterie
  • Statistiques globales de l'appareil
  • Consommation énergétique approximative par UID et composant système
  • Nombre de millisecondes mobiles par application par paquet
  • Statistiques agrégées de l'UID du système
  • Statistiques agrégées de l'UID de l'application

Utilisez l'option --help pour découvrir les différentes options permettant d'adapter la sortie. Par exemple, pour imprimer l'utilisation de la batterie statistiques d'un package d'application donné depuis la dernière charge de l'appareil, exécutez cette commande:

$ adb shell dumpsys batterystats --charged <package-name>

Vous pouvez utiliser Batterie Historian sur la sortie de la commande dumpsys pour générer une visualisation HTML des événements liés à l'alimentation à partir des journaux. Ces informations vous permettent de comprendre et de diagnostiquer plus facilement les problèmes liés à la batterie.

Android en milieu professionnel et éducatif

Configuration gérée

Android 5.0 propose de nouvelles fonctionnalités pour exécuter des applications dans un environnement d'entreprise. A administrateur de l'appareil peut lancer un processus de provisionnement géré pour ajouter une coprésentation, mais séparer profil géré sur un appareil, si l'utilisateur possède déjà un compte personnel. Les applications associées à des profils gérés apparaissent à côté les applications non gérées dans le Lanceur d'applications, l'écran "Récents" et les notifications de l'utilisateur.

Pour lancer le processus de provisionnement géré, envoyez ACTION_PROVISION_MANAGED_PROFILE dans un Intent. Si l'appel réussit, le système déclenche le rappel onProfileProvisioningComplete(). Vous pouvez ensuite appeler setProfileEnabled() pour activer ce profil géré.

Par défaut, seul un petit sous-ensemble d'applications est activé dans le profil géré. Vous pouvez installer des applications supplémentaires dans le profil géré en appelant enableSystemApp()

Si vous développez une application de lanceur, vous pouvez utiliser la nouvelle classe LauncherApps pour obtenir une liste des activités pouvant être lancées pour l'utilisateur actuel et les profils gérés associés. Votre Lanceur d'applications peut Les applications gérées sont bien visibles grâce à l'ajout d'un badge professionnel à l'icône. drawable. Pour récupérer l'icône avec badge, appelez getUserBadgedIcon().

Pour savoir comment utiliser cette nouvelle fonctionnalité, consultez les Exemple d'implémentation de BasicManagedProfile dans cette version.

Propriétaire de l'appareil

Android 5.0 permet de déployer une application propriétaire d'appareil. Un appareil propriétaire est un type spécialisé administrateur de l'appareil qui a la possibilité de créer et de supprimer des utilisateurs secondaires configurer les paramètres généraux sur l'appareil. Votre application propriétaire de l'appareil peut utiliser les méthodes de la classe DevicePolicyManager pour contrôler de manière précise la configuration, la sécurité et les applications sur les appareils gérés. Un appareil ne peut avoir qu'un seul propriétaire actif à la fois.

Pour déployer et activer le compte d'un propriétaire d'appareil, vous devez effectuer un transfert de données NFC depuis une application de programmation vers l'appareil alors que celui-ci est dans de l'état. Ce transfert de données envoie les mêmes informations que dans l'intent de provisionnement comme décrit dans la section Provisionnement géré.

Épinglage d'écran

Android 5.0 introduit une nouvelle API d'épinglage d'écran qui vous permet d'empêcher temporairement les utilisateurs de quitter votre tâche ou d'être interrompus par des notifications. Cela peut être utilisé, par exemple, si vous développez une application éducative pour pour répondre à des exigences d'évaluation à enjeux élevés sur Android, ou à un objectif ou une application kiosque. Une fois que votre application active l'épinglage d'écran, les utilisateurs ne peuvent pas voir les notifications, accéder à d'autres applications ni revenir à l'écran d'accueil tant que votre application n'a pas quitté le mode.

Il existe deux façons d'activer l'épinglage d'écran :

  • Manuellement:les utilisateurs peuvent activer l'épinglage d'écran dans Paramètres > Sécurité > Épinglage d'écran, puis sélectionnez les tâches qu'ils souhaitent en appuyant sur l'icône représentant une punaise verte dans l'écran "Récents".
  • Par programmation:pour activer l'épinglage d'écran programmatiquement, appeler startLockTask() depuis votre application. Si l'application à l'origine de la demande n'est pas propriétaire de l'appareil, l'utilisateur est invité pour confirmer. Une application appartenant au propriétaire de l'appareil peut appeler la méthode setLockTaskPackages() pour permettre aux applications d'être épinglées sans l'étape de confirmation de l'utilisateur.

Lorsque le verrouillage des tâches est activé, le comportement suivant se produit :

  • La barre d'état est vide, et les notifications utilisateur et les informations d'état sont masquées.
  • Les boutons "Accueil" et "Applications récentes" sont masqués.
  • Les autres applications ne peuvent pas lancer de nouvelles activités.
  • L'application actuelle peut démarrer de nouvelles activités, à condition que cela ne soit pas le cas créer des tâches.
  • Lorsque l'épinglage d'écran est appelé par le propriétaire d'un appareil, l'utilisateur reste verrouillé à votre application jusqu'à ce qu'elle appelle stopLockTask()
  • Si l'épinglage d'écran est activé par une autre application qui n'est pas le propriétaire de l'appareil ou directement par l'utilisateur, l'utilisateur peut quitter l'application en appuyant de manière prolongée sur les boutons "Retour" et "Récents".

Framework d'impression

Rendre le PDF au format bitmap

Vous pouvez désormais afficher les pages d'un document PDF en images bitmap pour les imprimer à l'aide de la nouvelle classe PdfRenderer. Vous devez spécifier un ParcelFileDescriptor accessible (c'est-à-dire que le contenu peut être accédé de manière aléatoire) sur lequel le système écrit le contenu imprimable. Votre application peut obtenir une page à afficher avec openPage(), puis appeler render() pour convertir le PdfRenderer.Page ouvert en bitmap. Vous pouvez également définir des paramètres supplémentaires si vous ne souhaitez convertir qu'une partie du document en image bitmap (par exemple, pour implémenter un rendu en tuiles pour faire un zoom avant sur le document).

Pour obtenir un exemple d'utilisation des nouvelles API, consultez l'exemple PdfRendererBasic.

Système

Statistiques utilisation de l'appli

Vous pouvez désormais accéder à l'historique d'utilisation des applications sur un appareil Android avec le Nouvelle API android.app.usage. Cette API fournit des explications plus détaillées sur l'utilisation d'informations que les getRecentTasks(). Pour utiliser cette API, vous devez d'abord déclarer l'autorisation "android.permission.PACKAGE_USAGE_STATS" dans votre fichier manifeste. L'utilisateur doit également autoriser l'accès à cette application dans Paramètres > Sécurité > Applis avec accès aux données d'utilisation.

Le système collecte les données d'utilisation pour chaque application, en agrégeant les des données à intervalles quotidiens, hebdomadaires, mensuels et annuels. La durée maximale pendant laquelle le système conserve ces données est la suivante :

  • Données quotidiennes : 7 jours
  • Données hebdomadaires: 4 semaines
  • Données mensuelles : 6 mois
  • Données annuelles : 2 ans

Pour chaque application, le système enregistre les données suivantes :

  • Dernière utilisation de l'application
  • Durée totale pendant laquelle l'application était exécutée au premier plan pendant cet intervalle de temps (par jour, semaine, mois ou année)
  • Code temporel de capture lorsqu'un composant (identifié par un package et un nom d'activité) est déplacé au premier plan ou en arrière-plan au cours d'une journée
  • Capture du code temporel lorsqu'une configuration de l'appareil a changé (par exemple, lorsque l'orientation de l'appareil a changé en raison d'une rotation)

Tests et accessibilité

Améliorations des tests et de l'accessibilité

Android 5.0 ajoute les fonctionnalités suivantes pour les tests et l'accessibilité :

  • Les nouvelles méthodes getWindowAnimationFrameStats() et getWindowContentFrameStats() capturent les statistiques de frame pour les animations et le contenu des fenêtres. Ces méthodes vous permettent d'écrire des tests d'instrumentation pour évaluer si une application s'affiche ; des cadres à une fréquence d'actualisation suffisante pour offrir une expérience utilisateur fluide.
  • Les nouvelles executeShellCommand() vous permet d'exécuter des commandes shell à partir de votre test d'instrumentation. La L'exécution de la commande est semblable à l'exécution de adb shell depuis un hôte connecté à l'appareil, ce qui vous permet d'utiliser des outils basés sur le shell, comme dumpsys, am, content et pm.
  • Services d'accessibilité et outils de test qui utilisent les API d'accessibilité (par exemple, UiAutomator) vous pouvez maintenant récupérer des informations détaillées sur les propriétés des fenêtres un écran avec lequel les voyants peuvent interagir. Pour récupérer une liste AccessibilityWindowInfo, appelez la nouvelle getWindows() .
  • Nouvelle version de AccessibilityNodeInfo.AccessibilityAction permet de définir des actions standards ou personnalisées à effectuer AccessibilityNodeInfo La nouvelle classe AccessibilityNodeInfo.AccessibilityAction remplace les API liées aux actions précédemment trouvées dans AccessibilityNodeInfo.
  • Android 5.0 offre un contrôle plus précis de la synthèse vocale dans votre application. La nouvelle classe Voice permet à votre application d'utiliser des profils vocaux associés à des paramètres régionaux, de qualité et de latence spécifiques, ainsi qu'à des paramètres spécifiques au moteur de synthèse vocale.

IME

Changement plus facile entre les langues de saisie

À partir de la version 5.0 d'Android, les utilisateurs peuvent passer plus facilement de l'une à l'autre. toutes les entrées éditeurs de méthodes (IME) pris en charge par la plate-forme. en exécutant les tâches action de changement d'appareil (toucher en général une icône en forme de globe sur le clavier virtuel) par cycle par tous ces IME. Ce changement de comportement est mis en œuvre par shouldOfferSwitchingToNextInputMethod() .

De plus, le framework vérifie maintenant si l'IME suivant inclut un mécanisme de commutation du tout (et, par conséquent, si cet IME prend en charge le passage à l'IME après celle-ci). Un IME avec un mécanisme de basculement ne bascule pas vers un IME sans mécanisme de basculement. Ce changement de comportement est implémenté par la méthode switchToNextInputMethod().

Pour voir un exemple d'utilisation des API de commutation IME mises à jour, reportez-vous à exemple d'implémentation pour le clavier virtuel mis à jour dans cette version. Pour savoir comment implémenter le basculement entre les IME, consultez la section Créer une méthode de saisie.

Déclarations de fichier manifeste

Fonctionnalités obligatoires déclarables

Les valeurs suivantes sont désormais prises en charge dans le <uses-feature> pour vous assurer que votre application n'est installée que sur les appareils de fournir les fonctionnalités dont votre application a besoin.

Autorisations utilisateur

L'autorisation suivante est désormais prise en charge dans l'élément <uses-permission> pour déclarer les autorisations requises par votre application pour accéder à certaines API.

  • BIND_DREAM_SERVICE : lorsque vous ciblez le niveau d'API 21 ou version ultérieure, cette autorisation est requise par un service Daydream pour s'assurer que seul le système peut s'y associer.