API Android 3.0

Niveau d'API:11

Pour les développeurs, la plate-forme Android 3.0 (HONEYCOMB) est disponible en tant que composant téléchargeable pour le SDK Android. La plate-forme téléchargeable inclut une bibliothèque et un système Android ainsi qu'un ensemble d'apparences d'émulateur, entre autres. La plate-forme téléchargeable n'inclut aucune bibliothèque externe.

Pour les développeurs, la plate-forme Android 3.0 est disponible sous la forme un composant téléchargeable pour le SDK Android. La plate-forme téléchargeable comprend une bibliothèque et une image système Android, ainsi qu'un ensemble de skins d'émulateur et plus encore. Pour commencer à développer ou à tester avec Android 3.0, utilisez Android SDK Manager pour télécharger la plate-forme dans votre SDK.

Présentation de l'API

Les sections ci-dessous offrent un aperçu technique des nouveautés d'Android 3.0 pour les développeurs, y compris les nouvelles fonctionnalités et les modifications apportées à l'API du framework depuis la version précédente.

Fragments

Un fragment est un nouveau composant de framework qui vous permet de séparer les éléments distincts d'une en modules autonomes qui définissent leur propre UI et leur propre cycle de vie. Pour créer un vous devez étendre la classe Fragment et implémenter plusieurs cycles de vie de rappel, semblables à Activity. Vous pouvez ensuite combiner plusieurs fragments dans une même activité pour créer une interface utilisateur à plusieurs volets dans laquelle chaque volet gère son propre cycle de vie et ses propres entrées utilisateur.

Vous pouvez également utiliser un fragment sans fournir d'UI et l'utiliser comme worker pour l'activité, par exemple pour gérer la progression d'un téléchargement qui ne se produit que lorsque l'activité est en cours d'exécution.

De plus :

  • Les fragments sont autonomes et vous pouvez les réutiliser dans plusieurs activités
  • Vous pouvez ajouter, supprimer, remplacer et animer des fragments dans l'activité
  • Vous pouvez ajouter des fragments à une pile "Retour" gérée par l'activité, ce qui permet de conserver l'état des fragments à mesure qu'ils sont modifiés et de permettre à l'utilisateur de revenir en arrière dans les différents états.
  • En fournissant des mises en page alternatives, vous pouvez combiner des fragments en fonction de la taille et de l'orientation de l'écran.
  • Les fragments ont un accès direct à leur activité de conteneur et peuvent contribuer à des éléments de la barre d'action de l'activité (voir ci-dessous).

Pour gérer les fragments de votre activité, vous devez utiliser FragmentManager, qui fournit plusieurs API pour interagir avec les fragments, comme trouver des fragments dans l'activité et les faire sortir de la pile "Retour" pour restaurer leur état précédent.

Pour effectuer une transaction, telle que l'ajout ou la suppression d'un fragment, vous devez créer un FragmentTransaction. Vous pouvez ensuite appeler des méthodes telles que add(), remove() ou replace(). Une fois que vous avez appliqué toutes les modifications que vous souhaitez effectuer pour la transaction, vous devez appeler commit(). Le système applique alors la transaction de fragment à l'activité.

Pour en savoir plus sur l'utilisation des fragments, consultez la documentation sur les fragments. Plusieurs des exemples sont également disponibles dans le API Demos.

Barre d'action

La barre d'action remplace la barre de titre traditionnelle située en haut de la fenêtre d'activité. Elle inclut le logo de l'application dans le coin gauche et fournit une nouvelle interface pour les éléments du Menu d'options. De plus, le La barre d'action vous permet de:

  • Ajoutez des éléments de menu directement dans la barre d'action en tant que "tâches".

    Dans votre déclaration XML pour l'élément de menu, incluez l'attribut android:showAsAction avec la valeur "ifRoom". S'il y a assez de place, le menu s'affiche directement dans la barre d'action. Sinon, l'élément est placé dans le menu à développer, qui s'affiche lorsque vous cliquez sur l'icône de menu sur le côté droit de la barre d'action.

  • Remplacez une action par un widget (un champ de recherche, par exemple) en créant une « vue d’action ».

    Dans la déclaration XML de l'élément de menu, ajoutez l'attribut android:actionViewLayout avec une ressource de mise en page ou l'attribut android:actionViewClass avec le nom de classe d'un widget. Vous devez également déclarer l'attribut android:showAsAction pour que l'article s'affiche dans la barre d'action). Si l'espace disponible dans la barre d'action est insuffisant et que l'élément apparaît dans la menu à développer, il se comporte comme un élément de menu standard et n'affiche pas le widget.

  • Ajouter une action au logo de l'application et le remplacer par un logo personnalisé

    L'ID android.R.id.home est automatiquement attribué au logo de l'application. que le système transmet au rappel onOptionsItemSelected() de votre activité en cas d'appui. Il vous suffit de répondre à cet ID dans votre rappel pour effectuer une action, par exemple accéder à la page d'accueil de votre application activité.

    Pour remplacer l'icône par un logo, indiquez le logo de votre application dans le fichier manifeste à l'aide de l'attribut android:logo puis appelez setDisplayUseLogoEnabled(true) dans votre activité.

  • Ajouter un fil d'Ariane pour revenir en arrière dans la pile "Retour" de fragments
  • Ajouter des onglets ou une liste déroulante pour parcourir les fragments
  • Personnaliser la barre d'action avec des thèmes et des arrière-plans

La barre d'action est standard pour toutes les applications qui utilisent le nouveau thème holographique, qui est également standard lorsque vous définissez android:minSdkVersion ou android:targetSdkVersion sur "11".

Pour en savoir plus sur la barre d'action, consultez la documentation sur la barre d'action. Plusieurs des exemples sont également disponibles dans le API Demos.

Presse-papiers du système

Les applications peuvent désormais copier et coller des données (au-delà d'un simple texte) vers et depuis l'ensemble du système presse-papiers. Les données coupées peuvent être du texte brut, un URI ou un intent.

En fournissant au système un accès aux données que vous souhaitez que l'utilisateur copie, via un fournisseur de contenu, l'utilisateur peut copier du contenu complexe (comme une image ou une structure de données) à partir de votre application et le coller dans une autre application compatible avec ce type de contenu.

Pour commencer à utiliser le presse-papiers, récupérez l'objet ClipboardManager global en appelant getSystemService(CLIPBOARD_SERVICE).

Pour copier un élément dans le presse-papiers, vous devez créer un objet ClipData contenant un ou plusieurs ClipData.Item. d'objets, chacun décrivant une seule entité. Créer un objet ClipData ne contenant qu'un seul élément ClipData.Item, vous pouvez utiliser l'une des méthodes d'assistance, tels que newPlainText(), newUri() et newIntent(), qui renvoient chacun un objet ClipData préchargé avec le ClipData.Item que vous fournissez.

Pour ajouter ClipData au presse-papiers, transmettez-le à setPrimaryClip() pour votre instance de ClipboardManager.

Vous pouvez ensuite lire un fichier à partir du presse-papiers (pour le coller) en appelant getPrimaryClip() sur le ClipboardManager. Gérer les ClipData que vous recevez peuvent être compliqués et vous devez vous assurer que vous pouvez bien gérer le type de données dans le presse-papiers avant d'essayer de le coller.

Le presse-papiers ne contient qu'une seule partie de données coupées (un objet ClipData) à la fois, mais un ClipData peut contenir plusieurs ClipData.Item.

Pour en savoir plus, consultez la documentation sur la Copie et le collage. Vous pouvez également voir une implémentation simple de copier-coller dans les démonstrations de l'API. exemple et une implémentation plus complète dans l'exemple de bloc-notes.

Glisser-déposer

Les nouvelles API simplifient les opérations de glisser-déposer dans l'interface utilisateur de votre application. Une opération de glisser-déposer consiste à transférer un type de données (transportées dans un objet ClipData) d'un emplacement à un autre. Le point de départ et d'arrivée de l'opération de glisser-déposer est un View. Par conséquent, les API qui gèrent directement les opérations de glisser-déposer se trouvent dans la classe View.

Le cycle de vie d'une opération de glisser-déposer est défini par plusieurs actions de déplacement : défini par un objet DragEvent, tel que ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED et ACTION_DROP Chaque vue qui souhaite participer à un déplacement peut écouter ces actions.

Pour commencer à faire glisser le contenu de votre activité, appelez startDrag() sur un View, en fournissant un objet ClipData qui représente les données à faire glisser, un View.DragShadowBuilder pour faciliter l'"ombre" ; que les utilisateurs voient sous leurs doigts lorsqu'ils font glisser un élément Object et qu'ils peuvent partager des informations sur l'objet faisant glisser avec les vues susceptibles de le recevoir.

Pour accepter un objet de glisser-déposer dans un View (recevoir le "déposer"), enregistrez la vue avec un OnDragListener en appelant setOnDragListener(). Lorsqu'un événement de déplacement se produit sur la vue, le système appelle onDrag() pour OnDragListener, qui reçoit une réponse DragEvent. décrivant le type d'action de déplacement qui a eu lieu (par exemple, ACTION_DRAG_STARTED, ACTION_DRAG_ENTERED et ACTION_DROP). Lors d'un déplacement, le système appelle à plusieurs reprises onDrag() pour la vue située sous le déplacement, afin de fournir une d'événements de déplacement. La vue réceptrice peut interroger le type d'événement envoyé à onDragEvent() en appelant getAction() sur DragEvent.

Remarque:Bien qu'un événement de déplacement puisse comporter un objet ClipData, cela n'est pas lié au presse-papiers du système. Glisser-déposer ne doit jamais placer les données déplacées dans le presse-papiers du système.

Pour plus d'informations, consultez la section Déplacer des données Suppression. Vous pouvez également voir une implémentation du glisser-déposer dans l'application Explications des API et dans l'application Honeycomb Gallery.

Widgets d'application

Android 3.0 prend en charge plusieurs nouvelles classes de widgets pour des widgets d'application plus interactifs sur les utilisateurs Écran d'accueil, y compris: GridView, ListView, StackView, ViewFlipper et AdapterViewFlipper.

Plus important encore, vous pouvez utiliser le nouveau RemoteViewsService pour créer une application des widgets avec des collections, à l'aide de widgets tels que GridView, ListView et StackView, qui s'appuient sur des données distantes ; par exemple depuis un fournisseur de contenu.

La classe AppWidgetProviderInfo (définie en XML avec un élément <appwidget-provider>) accepte également deux nouveaux champs : autoAdvanceViewId et previewImage. Le champ autoAdvanceViewId vous permet de spécifier l'ID de vue de la sous-vue du widget d'application qui doit être avancé automatiquement par l'hôte du widget d'application. La Le champ previewImage spécifie un aperçu de ce à quoi le widget d'application ressemble et s'affiche à l'utilisateur dans le sélecteur de widgets. Si ce champ n'est pas fournie, l'icône du widget de l'application est utilisée pour l'aperçu.

Pour vous aider à créer une image d'aperçu pour le widget de votre application (à spécifier dans le champ previewImage), l'émulateur Android inclut une application appelée "Aperçu du widget". Pour créer une image d'aperçu, lancez cette application, sélectionnez l'icône le widget de votre application, configurez-le comme vous souhaitez que l'image d'aperçu s'affiche, puis enregistrez-le. et le placer dans les ressources drawables de votre application.

Vous pouvez voir une implémentation des nouvelles fonctionnalités de widget d'application dans les applications Widget d'application StackView et Widget de liste météo.

Notifications de la barre d'état

Les API Notification ont été étendues pour permettre davantage de contenus enrichis les notifications de la barre, ainsi qu'une nouvelle classe Notification.Builder qui vous permet créer des objets Notification.

Les nouveautés incluent les fonctionnalités suivantes :

  • Prise en charge d'une icône de grande taille dans la notification à l'aide de setLargeIcon(). C’est généralement pour applications de réseau social pour afficher la photo de contact de la personne à l'origine de la notification ou pour que les applications multimédias affichent la vignette d'un album.
  • Prise en charge des mises en page personnalisées dans le bandeau de la barre d'état, à l'aide de setTicker().
  • Prise en charge des mises en page de notifications personnalisées permettant d'inclure des boutons avec des éléments PendingIntent, pour des widgets de notification plus interactifs. Par exemple, un notification permet de contrôler la lecture de musique sans démarrer d'activité.

Chargeurs de contenu

Les nouvelles API de framework facilitent le chargement asynchrone des données à l'aide de la classe Loader. Vous pouvez l'utiliser en combinaison avec des composants d'interface utilisateur tels que les vues et pour charger dynamiquement des données à partir de threads de travail. La sous-classe CursorLoader est spécialement conçue pour vous aider à le faire pour les données sauvegardées par un ContentProvider.

Il vous suffit d'implémenter l'interface LoaderCallbacks pour recevoir des rappels lorsqu'un nouveau chargeur est demandé ou que les données ont changé, puis d'appeler initLoader() pour initialiser le chargeur de votre activité ou de votre fragment.

Pour en savoir plus, consultez la documentation sur les chargeurs. Vous pouvez également consulter un exemple de code utilisant des chargeurs dans les exemples LoaderCursor et LoaderThrottle.

API Bluetooth A2DP et casque

Android inclut désormais des API permettant aux applications de vérifier l'état des appareils Bluetooth A2DP et de profil de casque connectés. Par exemple, les applications peuvent détecter si un casque Bluetooth est connecté pour écouter de la musique et, le cas échéant, notifier l'utilisateur. Les applications peuvent également recevoir diffuse des commandes AT spécifiques au fournisseur et informent l'utilisateur de l'état de la connexion appareil connecté, par exemple lorsque la batterie de l'appareil connecté est faible.

Vous pouvez initialiser le BluetoothProfile correspondant en appelant getProfileProxy() avec A2DP ou HEADSET. constante de profil et BluetoothProfile.ServiceListener pour recevoir des rappels lorsque le client Bluetooth est connecté ou déconnecté.

Framework d'animation

Un tout nouveau framework d'animation flexible vous permet d'animer les propriétés arbitraires de tout objet (vue, drawable, fragment, objet ou autre). Il vous permet de définir plusieurs aspects des animations, par exemple:

  • Durée
  • Montant et comportement de répétition
  • Type d'interpolation temporelle
  • Ensembles d'animations permettant de lire les animations ensemble, de manière séquentielle ou après un certain délai
  • Délai d'actualisation des frames

Vous pouvez définir ces aspects d'animation, entre autres, pour les valeurs int, float et hexadécimales d'un objet couleurs, par défaut. Autrement dit, lorsqu'un objet possède un champ de propriété pour l'un de ces types, peut changer sa valeur au fil du temps pour affecter une animation. Pour animer tout autre type de valeur, vous indiquez au système comment calculer les valeurs pour ce type donné en implémentant l'interface TypeEvaluator.

Vous pouvez utiliser deux outils d'animation pour animer les valeurs d'une propriété: ValueAnimator et ObjectAnimator. ValueAnimator calcule les valeurs d'animation, mais n'est pas au courant de l'objet ou de la propriété spécifique qui est animé en conséquence. Il effectue simplement les calculs et vous devez écouter les mises à jour et traiter les données selon votre propre logique. ObjectAnimator est une sous-classe de ValueAnimator. Elle vous permet de définir l'objet et la propriété à animer, et gère l'ensemble du travail d'animation. Autrement dit, vous fournissez à ObjectAnimator l'objet à animer, la propriété de l'objet à modifier au fil du temps et un ensemble de valeurs à appliquer à la propriété au fil du temps, puis vous démarrez l'animation.

De plus, la classe LayoutTransition permet d'activer les animations de transition automatique pour les modifications apportées à la mise en page de votre activité. Pour activer les transitions pour une partie de la mise en page, créez un objet LayoutTransition et définissez-le sur n'importe quel ViewGroup en appelant setLayoutTransition(). Cela crée des valeurs par défaut animations à exécuter chaque fois que des éléments sont ajoutés ou supprimés du groupe. Pour spécifier des valeurs personnalisées d'animations, appeler setAnimator() sur LayoutTransition et fournir un Animator personnalisé, comme ValueAnimator ou ObjectAnimator comme expliqué ci-dessus.

Pour en savoir plus, consultez la documentation Animation des propriétés. Vous pouvez ainsi que des exemples d'utilisation des API Animation dans API Demos.

Framework d'UI étendu

  • Sélection à choix multiples pour ListView et GridView

    Le nouveau mode CHOICE_MODE_MULTIPLE_MODAL pour setChoiceMode() permet aux utilisateurs de sélectionner plusieurs éléments dans un ListView ou un GridView. Lorsqu'il est utilisé avec la barre d'action, les utilisateurs peuvent sélectionner plusieurs éléments, puis choisir l'action à effectuer dans une liste d'options de la barre d'action (qui est devenue un mode d'action à choix multiples).

    Pour activer la sélection à choix multiples, appelez setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) et enregistrez un MultiChoiceModeListener avec setMultiChoiceModeListener().

    Lorsque l'utilisateur appuie de manière prolongée sur un élément, la barre d'action passe en mode d'action à choix multiples. Le système informe MultiChoiceModeListener lorsque des éléments sont sélectionnés en appelant onItemCheckedStateChanged().

    Pour obtenir un exemple de sélection multiple, consultez la classe List15.java dans l'application exemple "Démos d'API".

  • Nouvelles API pour transformer les vues

    Les nouvelles API vous permettent d'appliquer facilement des transformations 2D et 3D aux vues de la mise en page de votre activité. De nouvelles transformations sont possibles grâce à un ensemble de propriétés d'objet qui définissent les la position de la mise en page, l'orientation, la transparence, etc.

    Les nouvelles méthodes permettant de définir les propriétés de la vue incluent les suivantes : setAlpha(), setBottom(), setLeft(), setRight(), setBottom(), setPivotX(), setPivotY(), setRotationX(), setRotationY(), setScaleX(), setScaleY(), setAlpha(), etc.

    Certaines méthodes disposent également d'un attribut XML correspondant que vous pouvez spécifier dans votre mise en page. pour appliquer une transformation par défaut. Les attributs disponibles incluent : translationX, translationY, rotation, rotationX, rotationY, scaleX, scaleY, transformPivotX, transformPivotY et alpha.

    Utilisation de certaines de ces nouvelles propriétés de vue en combinaison avec le nouveau framework d'animation (décrit ci-dessus), vous pouvez facilement appliquer des animations sophistiquées à vos vues. Par exemple, pour faire pivoter sur son axe y, fournissez à ObjectAnimator l'View, la "rotationY" et les valeurs de début et de fin:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
  • Nouveaux thèmes holographiques

    Les widgets système standard et l'apparence générale ont été repensés et intègrent une nouvelle "holographique" le thème de l'interface utilisateur. Le système applique le nouveau thème en utilisant le système standard de style et de thème.

    Toute application qui cible la plate-forme Android 3.0 (en définissant la valeur "11" pour android:minSdkVersion ou android:targetSdkVersion) hérite du thème holographique par défaut. Toutefois, si votre application applique également son propre thème, ce dernier remplace thème holographique, sauf si vous modifiez vos styles pour qu'ils héritent du thème holographique.

    Pour appliquer le thème holographique à des activités individuelles ou pour l'hériter dans vos propres définitions de thèmes, utilisez l'un des nouveaux thèmes Theme.Holo. Si votre application est compatible avec une version d'Android antérieure à 3.0 et s'applique thèmes personnalisés, vous devez sélectionner un thème basé sur la plate-forme version.

  • Nouveaux widgets
    • AdapterViewAnimator

      Classe de base pour un AdapterView qui exécute des animations lors du basculement entre ses vues.

    • AdapterViewFlipper

      ViewAnimator simple qui effectue une animation entre deux vues ou plus qui y ont été ajoutées. Un seul enfant est affiché à la fois. Sur demande, il peut basculer automatiquement entre chaque enfant à intervalles réguliers.

    • CalendarView

      Permet aux utilisateurs de sélectionner des dates dans un calendrier en appuyant dessus. Ils peuvent faire défiler ou faire glisser le calendrier jusqu'à la date souhaitée. Vous pouvez configurer la période disponible dans le widget.

    • ListPopupWindow

      S'ancre sur une vue hôte et affiche une liste d'options, par exemple pour une liste de suggestions lors de la saisie dans un affichage EditText.

    • NumberPicker

      Permet à l'utilisateur de sélectionner un nombre dans une plage prédéfinie. Le widget présente une entrée et les boutons haut et bas pour sélectionner un nombre. Si l'utilisateur appuie sur le champ de saisie, il peut faire défiler les valeurs ou appuyer à nouveau pour modifier directement la valeur actuelle. Il vous permet également de cartographier des positions aux chaînes, de sorte que la chaîne correspondante s'affiche à la place de l'index la position de votre annonce.

    • PopupMenu

      Affiche un Menu dans une fenêtre pop-up modale ancrée à une vue. Le pop-up s'affiche sous la vue d'ancrage s'il y a de la place, ou au-dessus si ce n'est pas le cas. Si l'IME (logiciel clavier) est visible, la fenêtre pop-up ne chevauche pas l'IME, tant que l'utilisateur n'a pas appuyé sur le .

    • SearchView

      Fournit un champ de recherche que vous pouvez configurer pour envoyer des requêtes de recherche à une activité spécifiée et afficher des suggestions de recherche (comme dans la boîte de dialogue de recherche traditionnelle). Ce est particulièrement utile pour proposer un widget Recherche dans la barre d'action. Pour en savoir plus, consultez la section Créer une interface de recherche.

    • StackView

      Vue qui affiche ses enfants dans une pile 3D et que les utilisateurs peuvent faire défiler comme dans un rolodex.

Graphiques

  • Carte graphique 2D avec accélération matérielle

    Vous pouvez désormais activer le moteur de rendu OpenGL pour votre application en définissant android:hardwareAccelerated="true" dans le <application> de l'élément du fichier manifeste ou pour des <activity> spécifiques éléments.

    Cet indicateur aide les applications en leur permettant de dessiner plus rapidement. Cela se traduit par des animations plus fluides, un défilement plus fluide, et de meilleures performances globales et une meilleure réponse à l'interaction de l'utilisateur.

  • En savoir plus sur la compatibilité des couches matérielles et logicielles

    Par défaut, aucune couche n'est spécifiée pour un View. Vous pouvez spécifier que la vue soit prise en charge par une couche matérielle ou logicielle, spécifiée par les valeurs LAYER_TYPE_HARDWARE et LAYER_TYPE_SOFTWARE, à l'aide de setLayerType() ou de l'attribut layerType.

    Une couche matérielle repose sur une texture spécifique au matériel (généralement des objets de tampon de frame ou FBO sur le matériel OpenGL) et entraîne le rendu de la vue à l'aide du rendu matériel d'Android. pipeline, mais uniquement si l'accélération matérielle est activée pour la hiérarchie des vues. Lorsque l'accélération matérielle est désactivée, les couches matérielles se comportent exactement comme les couches logicielles.

    Une couche logicielle repose sur un bitmap et entraîne le rendu de la vue à l'aide de le pipeline de rendu logiciel, même si l'accélération matérielle est activée. Les couches logicielles doivent être évitées lorsque l'arborescence de vues concernée est fréquemment mise à jour. Chaque mise à jour nécessitera un nouveau rendu la couche logicielle, ce qui peut potentiellement être lent.

    Pour en savoir plus, consultez la documentation LAYER_TYPE_HARDWARE et LAYER_TYPE_SOFTWARE.

  • Moteur graphique 3D de Renderscript

    Renderscript est un framework 3D d'exécution qui fournit à la fois une API pour créer des scènes 3D et un langage de nuanceur spécial, indépendant de la plate-forme, pour des performances maximales. Avec Renderscript, vous pouvez accélérer les opérations graphiques et le traitement des données. Renderscript est le moyen idéal de créer des effets 3D hautes performances pour les applications, les fonds d'écran, les carrousels, etc.

    Pour en savoir plus, consultez la page Mode de calcul et rendu 3D Renderscript.

Contenus multimédias

  • Vidéo en accéléré

    Les API Camcorder permettent désormais d'enregistrer des vidéos en accéléré. setCaptureRate() définit la fréquence à laquelle les images doit être capturé.

  • Compatibilité avec les textures pour les flux d'images

    Le nouveau SurfaceTexture vous permet de capturer un flux d'images en tant qu'OpenGL ES ou la texture. En appelant setPreviewTexture() pour votre instance Camera, vous pouvez spécifier le SurfaceTexture sur lequel dessiner la lecture vidéo ou les images d'aperçu de la caméra.

  • Diffusion en direct HTTP

    Les applications peuvent désormais transmettre une URL de playlist M3U au Media Framework pour lancer un HTTP Live la session de streaming. Le framework multimédia est compatible avec la plupart des spécifications HTTP Live Streaming, y compris le débit adaptatif. Consultez le document Formats multimédias acceptés pour plus d'informations.

  • Données EXIF

    Le ExifInterface inclut de nouveaux champs pour l'ouverture photo, la sensibilité ISO et l'exposition. en temps réel.

  • Profils de caméscope

    Nouvelle méthode hasProfile() et plusieurs vidéos les profils de qualité (tels que QUALITY_1080P, QUALITY_720P, QUALITY_CIF, etc.) vous permettent de déterminer le caméscope des options de qualité.

  • Transfert de fichiers multimédias numériques

    La plate-forme est compatible avec le protocole MTP/PTP (Media/Picture Transfer Protocol) sur USB, qui permet aux utilisateurs de transférer facilement tout type de fichiers multimédias entre des appareils et vers un ordinateur hôte. Les développeurs peuvent s'appuyer sur cette prise en charge pour créer des applications permettant aux utilisateurs de créer ou de gérer des fichiers multimédias à transférer ou à partager entre différents appareils.

  • Gestion des droits numériques (DRM)

    Nouveau framework extensible de gestion des droits numériques (DRM, Digital Rights Management) permettant de vérifier et d'appliquer des droits de propriété intellectuelle. Il est implémenté dans deux couches architecturales:

    • Une API de framework DRM, exposée aux applications et exécutée via la VM Dalvik pour des applications standards.
    • Gestionnaire DRM en code natif qui implémente l'API du framework et expose une interface permettant aux plug-ins DRM de gérer la gestion des droits et le déchiffrement pour divers schémas DRM.

    Pour les développeurs d'applications, le framework propose une API abstraite et unifiée qui simplifie le processus la gestion des contenus protégés. L'API masque la complexité des opérations DRM et permet mode de fonctionnement cohérent pour les contenus protégés et non protégés, et sur diverses DRM systèmes.

    Pour les fabricants d'appareils, les propriétaires de contenu et les fournisseurs de médias numériques sur Internet, la DRM l'API de plug-in du framework permet d'ajouter la prise en charge d'un schéma DRM de votre choix dans la Système Android, pour l'application sécurisée de la protection du contenu

    La version preview ne fournit aucun plug-in DRM natif pour vérifier et appliquer les droits numériques. Toutefois, les fabricants peuvent fournir des plug-ins DRM avec leurs appareils.

    Vous trouverez toutes les API DRM dans le package android.drm.

Compatibilité avec le clavier

  • Prise en charge des modificateurs Ctrl, Meta, Verr Maj, Num Lock et Scroll Lock. Pour plus d'informations, consultez META_CTRL_ON et les champs associés.
  • Compatible avec les claviers de bureau, y compris les touches Échap, Origine, Fin, Supprimer et d'autres éléments. Vous pouvez déterminer si les événements de touche proviennent d'un clavier complet : interroge getKeyboardType() et recherche KeyCharacterMap.FULL
  • TextView prend désormais en charge les raccourcis clavier pour couper, copier et coller et tout sélectionner à l'aide des combinaisons de touches Ctrl+X, Ctrl+C, Ctrl+V et Ctrl+A. Il est également compatible avec les touches Page Up/Page Down, Accueil/Fin et la sélection de texte au clavier.
  • KeyEvent ajoute plusieurs nouvelles méthodes pour faciliter la vérification de la clé l'état du modificateur correctement et de manière cohérente. Voir hasModifiers(int), hasNoModifiers(), metaStateHasModifiers(), metaStateHasNoModifiers()
  • Les applications peuvent implémenter des raccourcis clavier personnalisés en sous-classant Activity, Dialog ou View, puis en implémentant onKeyShortcut(). Le framework appelle cette méthode chaque fois qu'une touche est combinée à la touche Ctrl. Lorsque vous créez un menu d'options, vous pouvez enregistrer le clavier les raccourcis en définissant l'attribut android:alphabeticShortcut ou android:numericShortcut pour chaque <item> (ou avec setShortcut()).
  • Android 3.0 inclut un nouveau "clavier virtuel" appareil avec l'ID KeyCharacterMap.VIRTUAL_KEYBOARD. Le clavier virtuel dispose d'une carte de touches américaine de style ordinateur de bureau, qui est utile pour synthétiser les événements de touche afin de tester la saisie.

Événements tactiles fractionnés

Auparavant, une seule vue pouvait accepter des événements tactiles à la fois. Android 3.0 permet de répartir les événements tactiles entre les vues, voire les fenêtres, de sorte que différentes vues acceptent événements tactiles simultanés.

Les événements tactiles fractionnés sont activés par défaut lorsqu'une application cible Android 3.0 C'est-à-dire lorsque l'application a défini la valeur de l'attribut android:minSdkVersion ou android:targetSdkVersion sur "11".

Toutefois, les propriétés suivantes vous permettent de désactiver les événements tactiles fractionnés dans les vues de groupes de vues spécifiques et dans les fenêtres.

  • Attribut android:splitMotionEvents pour les groupes de vues vous permet de désactiver les événements tactiles fractionnés qui se produisent entre les vues enfants d'une mise en page. Exemple :
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    De cette manière, les vues enfants de la mise en page linéaire ne peuvent pas diviser les événements tactiles. Une seule vue peut recevoir des événements tactiles à la fois.

  • Propriété de style android:windowEnableSplitTouch vous permet de désactiver les événements tactiles fractionnés entre les fenêtres en les appliquant à un thème pour l'activité. ou de l'application entière. Exemple :
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    Lorsque ce thème est appliqué à un élément <activity> ou <application>, seuls les événements tactiles de la fenêtre d'activité en cours sont acceptés. Par exemple, en désactivant la répartition des événements tactiles entre les fenêtres, la barre système ne peut pas recevoir d'événements tactiles en même temps que le activité. Cela n'a pas d'incidence sur la possibilité pour les vues de l'activité de diviser les événements tactiles. Par défaut, l'activité peut toujours diviser les événements tactiles entre les vues.

    Pour en savoir plus sur la création d'un thème, consultez Appliquer des styles et des thèmes.

WebKit

  • Nouvelle classe WebViewFragment pour créer un fragment composé d'un WebView.
  • Nouvelles méthodes WebSettings :
    • setDisplayZoomControls() vous permet de masquer les commandes de zoom à l'écran, tout en permettant à l'utilisateur de zoomer avec les doigts (setBuiltInZoomControls() doit être défini true).
    • La nouvelle méthode WebSettings, setEnableSmoothTransition(), vous permet pour permettre des transitions fluides lors des panoramiques et des zooms. Lorsqu'elle est activée, WebView choisit une solution pour maximiser les performances (par exemple, le contenu de WebView peut ne pas être mis à jour pendant la transition).
  • Nouvelles méthodes WebView:
    • Rappel onPause() pour suspendre tout traitement associé à la WebView lorsqu'elle est masquée. Cela permet de réduire les ressources le trafic réseau lorsque la WebView n'est pas au premier plan.
    • Rappel onResume(), pour reprendre le traitement associé à la WebView, qui a été mise en veille pendant onPause().
    • saveWebArchive() vous permet d'enregistrer le la vue actuelle en tant qu'archive Web sur l'appareil.
    • showFindDialog() lance une recherche textuelle dans la vue actuelle.

Navigateur

L'application Navigateur ajoute les fonctionnalités suivantes pour prendre en charge les applications Web :

  • Capture multimédia

    Tel que défini par la capture d'écran HTML Media Capture le navigateur permet aux applications Web d'accéder à la capture audio, d'images et de vidéos de l'appareil. Par exemple, le code HTML suivant permet à l'utilisateur de prendre une photo à importer :

    <input type="file" accept="image/*;capture=camera" />

    En excluant le paramètre capture=camera, l'utilisateur peut choisir de prendre une nouvelle image avec l'appareil photo ou d'en sélectionner une sur l'appareil (par exemple, dans l'application Galerie).

  • Orientation de l'appareil

    Tel que défini par l'événement d'orientation de l'appareil le navigateur permet aux applications Web d'écouter les événements DOM qui fournissent des informations sur l'orientation physique et le mouvement de l'appareil.

    L'orientation de l'appareil est exprimée en degrés avec les axes x, y et z. Le mouvement est exprimés avec des données d'accélération et de taux de rotation. Une page Web peut enregistrer l'orientation événements en appelant window.addEventListener avec le type d'événement "deviceorientation" et les événements de mouvement en enregistrant le type d'événement "devicemotion".

  • Transformations 3D CSS

    Comme défini dans la spécification du module de transformation 3D CSS, le navigateur permet de transformer les éléments affichés par CSS en trois dimensions.

Utilitaires JSON

Les nouveaux cours JsonReader et JsonWriter vous aident lire et écrire des flux JSON. Les nouvelles API complètent les classes org.json, qui manipulent un document en mémoire.

Vous pouvez créer une instance de JsonReader en appelant sa méthode constructeur et en transmettant le InputStreamReader qui alimente la chaîne JSON. Commencez ensuite à lire un objet en appelant beginObject(), lisez un nom de clé avec nextName(), lisez la valeur à l'aide des méthodes respectives du type, telles que nextString() et nextInt(), et continuez à le faire tant que hasNext() est vrai.

Vous pouvez créer une instance de JsonWriter en appelant son constructeur et en transmettant le OutputStreamWriter approprié. Ensuite, écrivez les données JSON semblable au lecteur, en utilisant name() pour ajouter un nom de propriété et une méthode value() appropriée pour ajouter .

Ces classes sont strictes par défaut. setLenient() de chaque classe les configure de façon plus libérale dans ce qu'elles acceptent. Ce mode d'analyse indulgent est également compatible avec l'analyseur par défaut de org.json.

Nouvelles constantes de fonctionnalités

<uses-feature> l'élément manfest doit être utilisé pour informer les entités externes (telles que Google Play) de l'ensemble des les fonctionnalités matérielles et logicielles dont dépend votre application. Dans cette version, Android ajoute les nouvelles constantes suivantes que les applications peuvent déclarer avec cet élément :

  • "android.hardware.faketouch"

    Lorsqu'elle est déclarée, elle indique que l'application est compatible avec un appareil qui propose un un écran tactile émulé (ou mieux). Un appareil doté d'un écran tactile émulé fournit une entrée utilisateur capable d'émuler un sous-ensemble de l'écran tactile des fonctionnalités. Un système d'entrée de ce type est une souris ou une télécommande qui contrôle un curseur à l'écran. Ces systèmes d'entrée sont compatibles avec les événements tactiles de base tels que le clic vers le bas, le clic vers le haut et le glissement. Toutefois, les types d'entrées plus complexes (tels que les gestes, les balayages, etc.) peuvent être plus difficiles ou impossibles sur les appareils à faux-contact (et les gestes multipoint ne sont certainement pas possibles).

    Si votre application ne nécessite pas de gestes compliqués et que vous ne souhaitez pas qu'elle soit filtrée des appareils dotés d'un écran tactile émulé, vous devez déclarer "android.hardware.faketouch" avec un élément <uses-feature>. De cette façon, votre application sera disponible pour un maximum de types d'appareils, y compris ceux qui ne fournissent qu'une saisie tactile simulée.

    Tous les appareils équipés d'un écran tactile sont également compatibles avec "android.hardware.faketouch", car les fonctionnalités d'écran tactile sont un sur-ensemble des fonctionnalités de faux-contact. Par conséquent, sauf si vous avez réellement besoin d'un écran tactile, vous devez ajouter un élément <uses-feature> pour la simulation de l'écran tactile.

Nouvelles autorisations

  • "android.permission.BIND_REMOTEVIEWS"

    Cette autorisation doit être déclarée comme autorisation requise dans l'élément manifeste <service> pour une implémentation de RemoteViewsService. Par exemple, lorsque créer un widget d'application qui utilise RemoteViewsService pour renseigner une l'entrée du fichier manifeste peut se présenter comme suit:

    <service android:name=".widget.WidgetService"
        android:exported="false"
        android:permission="android.permission.BIND_REMOTEVIEWS" />

Nouvelles technologies de plate-forme

  • Stockage
    • Compatibilité avec le système de fichiers ext4 pour activer le stockage eMMC intégré.
    • Système de fichiers FUSE pour prendre en charge les appareils MTP.
    • Prise en charge du mode hôte USB pour les claviers et les hubs USB.
    • Compatibilité avec MTP/PTP
  • Noyau Linux
    • Mise à niveau vers la version 2.6.36
  • VM Dalvik
    • Nouveau code pour prendre en charge et optimiser le SMP
    • Diverses améliorations apportées à l'infrastructure JIT
    • Améliorations apportées au garbage collector :
      • Optimisé pour le SMP
      • Prise en charge de tailles de tas plus importantes
      • Gestion unifiée des bitmaps et des tampons d'octets
  • Bibliothèques principales Dalvik
    • Nouvelle implémentation beaucoup plus rapide de NIO (bibliothèque d'E/S moderne)
    • Amélioration des messages d'exception
    • Corrections apportées au niveau de l'exactitude et des performances

Rapport sur les différences entre les API

Pour obtenir une vue détaillée de toutes les modifications apportées aux API dans Android 3.0 (niveau d'API), 11), consultez le rapport sur les différences de l'API.

Niveau d'API

La plate-forme Android 3.0 fournit une version mise à jour de l'API du framework. L'API Android 3.0 est associée à un identifiant entier (11) stocké dans le système lui-même. Cet identifiant, appelé "niveau d'API", permet pour déterminer correctement si une application est compatible avec le système avant d'installer l'application.

Pour utiliser les API introduites dans Android 3.0 dans votre application, vous devez compiler l'application avec la bibliothèque Android fournie dans la plate-forme SDK Android 3.0. Selon vos besoins, vous devrez peut-être également ajouter un attribut android:minSdkVersion="11" à l'élément <uses-sdk> dans le fichier manifeste de l'application. Si votre application est conçue pour s'exécuter uniquement sur Android 2.3 ou version ultérieure, déclarer l'attribut empêche son installation sur les versions antérieures de la plate-forme.

Pour plus d'informations, consultez la page Qu'est-ce que l'API ? Niveau ?