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'attributandroid:actionViewClass
avec le nom de classe d'un . Vous devez également déclarer l'attributandroid: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 rappelonOptionsItemSelected()
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 appelezsetDisplayUseLogoEnabled(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
poursetChoiceMode()
permet aux utilisateurs de sélectionner plusieurs éléments à partir d'unListView
ou d'unGridView
. 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 unMultiChoiceModeListener
avecsetMultiChoiceModeListener()
.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 appelantonItemCheckedStateChanged()
.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
etalpha
.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
ouandroid: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 valeursLAYER_TYPE_HARDWARE
etLAYER_TYPE_SOFTWARE
, à l'aide desetLayerType()
oulayerType
.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
etLAYER_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 appelantsetPreviewTexture()
pour votreCamera
, vous pouvez spécifier leSurfaceTexture
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 queQUALITY_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 rechercheKeyCharacterMap.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. VoirhasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
- Pour implémenter des raccourcis clavier personnalisés, les applications peuvent sous-classer
Activity
,Dialog
ouView
et implémenteronKeyShortcut()
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'attributandroid:alphabeticShortcut
ouandroid:numericShortcut
pour chaque<item>
(ou avecsetShortcut()
). - 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'unWebView
- 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éfinitrue
).- 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 pendantonPause()
. 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.
- Rappel
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 deRemoteViewsService
. Par exemple, lorsque créer un widget d'application qui utiliseRemoteViewsService
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 ?