API Android 3.0

Niveau d'API:11

Pour les développeurs, la plate-forme Android 3.0 (HONEYCOMB) est disponible en téléchargement 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 ne contient bibliothèques.

Pour les développeurs, la plate-forme Android 3.0 est disponible sous la forme composant téléchargeable pour le SDK Android. La plate-forme téléchargeable comprend une bibliothèque Android et une image système, ainsi qu'un ensemble d'apparences d'émulateur et plus encore. Pour commencer à développer ou à tester sur 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 des fragments d'une même activité pour créer une UI à plusieurs volets dans laquelle chaque gère son propre cycle de vie et ses entrées utilisateur.

Vous pouvez également utiliser un fragment sans fournir d'UI et l'utiliser à la place en tant que nœud de calcul. de l'activité, par exemple pour gérer la progression d'un téléchargement qui se produit uniquement pendant 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é, en préservant l'état de fragments à mesure qu'ils sont modifiés, ce qui permet à l'utilisateur de revenir en arrière dans les différents états
  • En fournissant mises en page alternatives, vous pouvez combiner des fragments sur la taille et l'orientation de l'écran
  • Les fragments ont un accès direct à l'activité de leur conteneur et peuvent contribuer à la barre d'action d'une activité (décrit ci-après)

Pour gérer les fragments de votre activité, vous devez utiliser FragmentManager, qui fournit plusieurs API permettant d'interagir avec les fragments, par exemple comme rechercher des fragments dans l'activité et les faire sortir de la pile "Retour" pour restaurer leur dans l'é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é les modifications que vous souhaitez apporter à la transaction, vous devez appeler commit() et le système applique 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 la menu à développer, révélé par 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 . 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
  • Ajoutez 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, ou standard lorsque vous définissez android:minSdkVersion ou android:targetSdkVersion sur "11".

Pour en savoir plus, 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 tronqué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 (une image ou une structure de données, par exemple) depuis votre application ; le coller dans une autre application qui prend en charge 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 le ClipData au presse-papiers, transmettez-le à setPrimaryClip() pour votre instance de ClipboardManager.

Vous pouvez ensuite lire un fichier du presse-papiers (pour le coller) en appelant getPrimaryClip() au niveau de 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'un seul élément de données tronquées (un ClipData ) à la fois, mais une seule ClipData peut contenir plusieurs ClipData.Item.

Pour en savoir plus, consultez l'article et coller. 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. Un drag est le transfert d'un certain type de données, réalisé dans un ClipData. d'un endroit à un autre. Le point de début et de fin de l'opération de glisser-déposer est un View, de sorte que les API qui gèrent directement les opérations de glisser-déposer sont 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 faisant glisser dans une View (réception d'un "déposer"), enregistrez la vue. avec un OnDragListener en appelant setOnDragListener(). Lorsqu'un événement de déplacement se produit dans 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 de réception peut demander le type d'événement envoyé à onDragEvent() en appelant getAction() sur le 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 trouverez également une implémentation du glisser-déposer dans le Application Demos de l'API et Honeycomb Gallery application.

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 la vue Sous-vue du widget d'application qui doit être avancée 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), Android Emulator inclut une 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 l'implémentation des nouvelles fonctionnalités du widget d'application dans le widget d'application StackView et le widget Weather List. applications.

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 grande icône dans la notification, utilisant 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 reposant sur un ContentProvider.

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

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

Bluetooth A2DP et API des casques

Android inclut désormais des API permettant aux applications de vérifier l'état des connexions Bluetooth A2DP et profil de casque. 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
  • Répéter la quantité et le comportement
  • 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 du frame

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, 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 de l'animation, mais ne connaît pas les valeurs un objet ou une propriété animés. 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. vous permet de définir l'objet et la propriété à animer, et gère l'ensemble du travail d'animation. Autrement dit, vous attribuez à ObjectAnimator l'objet à animer, le de l'objet à évoluer au fil du temps et un ensemble de valeurs à appliquer à la propriété puis lancer l'animation.

De plus, la classe LayoutTransition permet la transition automatique des animations pour les modifications que vous apportez à la mise en page de votre activité. Pour activer les transitions pour une partie créez un objet LayoutTransition et définissez-le sur n'importe quelle ViewGroup en appelant setLayoutTransition(). Cela entraîne l'affichage 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 étendue

  • 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 à partir d'un ListView ou d'un GridView. Utilisation dans conjointement à la barre d'action, les utilisateurs peuvent sélectionner plusieurs éléments, puis choisir l'action à partir d'une liste d'options dans la barre d'action (qui s'est ensuite transformée en Mode Action).

    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 au mode Mode Action Le système informe MultiChoiceModeListener lorsque des éléments sont sélectionnés en appelant onItemCheckedStateChanged().

    Pour obtenir un exemple de sélection à choix multiples, consultez la section Liste15. Java dans l'exemple d'application API Demos.

  • Nouvelles API pour transformer les vues

    Les nouvelles API vous permettent d'appliquer facilement des transformations 2D et 3D aux vues de votre activité mise en page. 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: 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 le paramètre android:minSdkVersion ou android:targetSdkVersion sur "11" : 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 en hériter dans votre propre thème utilisez l'une des nouvelles Theme.Holo thèmes. 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 <ph type="x-smartling-placeholder">
      </ph>
    • AdapterViewAnimator

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

    • AdapterViewFlipper

      ViewAnimator simple qui s'anime entre deux vues ou plus ayant y a été ajouté. Un seul enfant est affiché à la fois. Sur demande, il peut se retourner automatiquement entre chaque enfant à intervalle régulier.

    • CalendarView

      Permet aux utilisateurs de sélectionner des dates dans un calendrier en appuyant dessus, et en faisant défiler l'écran ou en faisant glisser le doigt sur l'écran. le calendrier à 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. Le fait d'appuyer sur le champ de saisie permet à l'utilisateur faites défiler les valeurs ou appuyez de 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. La s'affiche sous la vue ancrée s'il y a de la place, ou au-dessus dans le cas contraire. 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 à un type et afficher des suggestions de recherche (comme avec la boîte de dialogue de recherche classique). Ce est particulièrement utile pour proposer un widget Recherche dans la barre d'action. Pour plus d'informations, consultez la page 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, aucun calque n'est spécifié pour une View. Vous pouvez spécifier que doit reposer sur une couche matérielle ou logicielle, spécifiée par les valeurs LAYER_TYPE_HARDWARE et LAYER_TYPE_SOFTWARE, à l'aide de setLayerType() ou 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 Android. du pipeline, mais uniquement si l'accélération matérielle est activée pour la hiérarchie des vues. Lorsque le matériel l'accélération 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é lorsque l'arborescence de vues concernée est souvent mise à jour. Chaque mise à jour nécessitera un nouveau rendu couche logicielle, ce qui peut potentiellement être lent.

    Pour en savoir plus, consultez la documentation sur 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 permettant de créer des scènes 3D. en tant que langage de nuanceur spécial et indépendant de la plate-forme pour des performances optimales. Avec Renderscript, vous peut 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é.

  • Textures compatibles avec 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 Camera, vous pouvez spécifier le SurfaceTexture sur lequel afficher les images de lecture vidéo ou d'aperçu à partir de 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. Media Framework est compatible avec la plupart des spécifications de 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 de code natif qui implémente l'API du framework et expose une interface pour la DRM pour gérer et déchiffrer les droits dans divers systèmes de 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 du 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 pas de plug-ins DRM natifs pour vérifier et appliquer des droits de propriété intellectuelle. Toutefois, les fabricants peuvent fournir des plug-ins DRM avec leurs appareils.

    Toutes les API DRM se trouvent dans le package android.drm.

Prise en charge du clavier

  • Prise en charge des modificateurs Ctrl, Méta, Verr Maj, Verr Num et Verrouillage du défilement. 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 prend également en charge Page précédente/Page suivante, Page précédente/Fin et sélection de texte à l'aide du 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()
  • Pour implémenter des raccourcis clavier personnalisés, les applications peuvent sous-classer Activity, Dialog ou View et implémenter onKeyShortcut() Le framework appelle cette méthode chaque fois qu'une clé est combinée à une touche de contrôle. Lors de la création d'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 réseau virtuel le clavier dispose d'un mappage des touches US de type ordinateur de bureau, qui permet de synthétiser les événements de touches à des fins de test saisie.

Événements tactiles fractionnés

Auparavant, les événements tactiles ne pouvaient être acceptés que dans une seule vue à 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 Autrement dit, lorsque l'application a défini le paramètre android:minSdkVersion ou android:targetSdkVersion sur "11".

Toutefois, les propriétés suivantes vous permettent de désactiver les événements tactiles fractionnés entre les vues qu'ils contiennent dans des groupes de vues spécifiques et entre des 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>
    

    Ainsi, 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é ou non de diviser les interactions tactiles dans les vues au sein de l'activité événements tactiles : par défaut, l'activité peut toujours répartir 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: <ph type="x-smartling-placeholder">
      </ph>
    • 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. Lorsque cette option est activée, WebView choisit une solution pour maximiser les performances (par exemple, le contenu de la WebView peut ne pas être mis à jour pendant le .
  • Nouvelles méthodes WebView: <ph type="x-smartling-placeholder">
      </ph>
    • 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 saisir Prenez une photo à importer:

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

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

  • 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 par la transformation CSS 3D Module, le navigateur permet de transformer les éléments affichés par CSS en trois .

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 une nom de clé avec nextName(), lire la valeur à l'aide de méthodes correspondant au type, comme nextString() et nextInt(), et continuez à le faire tant que hasNext() est défini sur "true".

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. Cette indulgence le mode d'analyse est également compatible avec l'analyseur par défaut de org.json.

Nouvelles constantes de caractéristiques

<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 Voici les nouvelles constantes 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. Il peut s'agir, par exemple, d'une souris ou d'une télécommande qui pilote le curseur à l'écran. Ces systèmes de saisie sont compatibles avec les événements tactiles de base tels que cliquer vers le bas, cliquer vers le haut et faire glisser. Cependant, les types de saisie plus complexes (tels que les gestes, les glissements d'un geste vif, etc.) peuvent être plus difficiles ou impossible sur les appareils faketouch (et les gestes multipoint sont certainement impossibles).

    Si votre application ne nécessite pas de gestes compliqués ne souhaitez pas que votre application soit filtrée sur les appareils dotés d'un écran tactile émulé, doit déclarer "android.hardware.faketouch" avec un <uses-feature> . Votre application sera ainsi disponible sur un maximum de types d'appareils, y compris ceux qui ne fournissent qu'une entrée tactile émulée.

    Tous les appareils dotés d'un écran tactile sont également compatibles avec "android.hardware.faketouch", car les capacités de l’écran tactile sont un sur-ensemble de fonctionnalités de faketouch. Ainsi, à moins que vous n'ayez besoin un écran tactile, vous devez ajouter un <uses-feature> pour faketouch.

Nouvelles autorisations

  • "android.permission.BIND_REMOTEVIEWS"

    Cette autorisation doit être déclarée comme une autorisation obligatoire dans le fichier 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 <ph type="x-smartling-placeholder">
      </ph>
    • Compatibilité avec le système de fichiers ext4 pour l'activation du 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é MTP/PTP
  • Noyau Linux <ph type="x-smartling-placeholder">
      </ph>
    • Mis à niveau vers la version 2.6.36
  • VM Dalvik <ph type="x-smartling-placeholder">
      </ph>
    • Nouveau code pour prendre en charge et optimiser les plates-formes de réseaux sociaux
    • Diverses améliorations apportées à l'infrastructure JIT
    • Améliorations apportées au récupérateur de mémoire: <ph type="x-smartling-placeholder">
        </ph>
      • Réglé pour SMP
      • Prise en charge de segments de mémoire plus importants
      • Gestion unifiée des bitmaps et des tampons d'octets
  • Bibliothèques Dalvik Core <ph type="x-smartling-placeholder">
      </ph>
    • 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 propose une version mise à jour de l'API du framework. L'API Android 3.0 se voit attribuer un identifiant sous forme de nombre entier, 11, soit stockées 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 pouvez devez également ajouter un android:minSdkVersion="11" à l'élément <uses-sdk> dans le fichier fichier manifeste. Si votre application est conçue pour s'exécuter uniquement sous Android 2.3 ou version ultérieure, La déclaration de l'attribut empêche l'installation de l'application à un stade antérieur. de la plate-forme.

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