Nivel de API: 11
Para los desarrolladores, la plataforma Android 3.0
(HONEYCOMB
) está disponible como archivo descargable
para el SDK de Android. La plataforma descargable incluye una biblioteca y un sistema de Android
un conjunto de máscaras de emulador y mucho más. La plataforma descargable no incluye fuentes externas,
bibliotecas.
Para los desarrolladores, la plataforma Android 3.0 se encuentra disponible como componente descargable para el SDK de Android. La plataforma descargable incluye una biblioteca de Android y una imagen del sistema, así como un conjunto de máscaras de emulador y más. Para comenzar a desarrollar o probar con Android 3.0, usa SDK Manager de Android para descargar la plataforma en tu SDK.
Descripción general de la API
En las siguientes secciones se proporciona una descripción general técnica de las novedades para desarrolladores de Android 3.0, incluidas las nuevas funciones y los cambios en la API de framework desde la versión anterior.
Fragmentos
Un fragmento es un nuevo componente de un framework que te permite separar distintos elementos de una
en módulos independientes que definen su propia IU y ciclo de vida. Para crear un
debes extender la clase Fragment
e implementar varios ciclos de vida
métodos de devolución de llamada, similares a Activity
. Luego, puedes combinar varias
se fragmentan en una sola actividad para compilar una IU multipanel en la que cada
administra su propio ciclo de vida y sus propias entradas del usuario.
También puedes usar un fragmento sin proporcionar una IU y, en su lugar, usar el fragmento como un trabajador para la actividad, como para administrar el progreso de una descarga que ocurre solo mientras se esté ejecutando la actividad.
Además:
- Los fragmentos son independientes y puedes volver a usarlos en varias actividades.
- Puedes agregar, quitar, reemplazar y animar fragmentos dentro de la actividad.
- Puedes agregar fragmentos a una pila de actividades administrada por la actividad y así preservar el estado de fragmentos a medida que se modifican y le permiten al usuario navegar hacia atrás a través de los diferentes estados
- Al proporcionar diseños alternativos, puedes mezclar y combinar fragmentos, según en el tamaño y la orientación de la pantalla
- Los fragmentos tienen acceso directo a su actividad de contenedor y pueden aportar elementos al Barra de acciones de la actividad (se trata a continuación)
Para administrar los fragmentos de tu actividad, debes usar FragmentManager
, que proporciona varias APIs para interactuar con fragmentos, como las siguientes:
como encontrar fragmentos en la actividad y quitarlos de la pila de actividades para restablecer su
en el estado anterior.
Para realizar una transacción, como agregar o quitar un fragmento, debes crear un FragmentTransaction
. Luego, puedes llamar a métodos como add()
, remove()
o replace()
. Una vez que hayas aplicado todas
los cambios que quieras realizar para la transacción, debes llamar a commit()
y el sistema aplicará la transacción del fragmento a
la actividad.
Para obtener más información sobre el uso de fragmentos, consulta la documentación sobre fragmentos. Varios Las muestras también están disponibles en el Demostraciones de la API.
Barra de acciones
La barra de acciones reemplaza la barra de título tradicional en la parte superior de la ventana de actividad. Incluye el logotipo de la aplicación en la esquina izquierda y proporciona una nueva interfaz para los elementos en la Menú de opciones. Además, el La barra de acciones te permite:
- Agregar elementos de menú directamente en la barra de acciones, como “elementos de acción”.
En tu declaración XML para el elemento de menú, incluye el atributo
android:showAsAction
con un valor de"ifRoom"
. Cuando hay suficiente espacio, el menú el elemento aparecerá directamente en la barra de acciones. De lo contrario, el elemento se coloca en el El menú ampliado, en realidad, se muestra con el ícono de menú de la derecha de la barra de acciones. - Reemplazar un elemento de acción por un widget (como un cuadro de búsqueda); crea un
"vista de acción".
En la declaración XML del elemento de menú, agrega el atributo
android:actionViewLayout
. con un recurso de diseño o el atributoandroid:actionViewClass
con el nombre de clase de un widget. (También debes declarar el atributoandroid:showAsAction
para que aparezca el elemento en la barra de acciones). Si no hay suficiente espacio en la barra de acciones y el elemento aparece en la menú ampliado, se comporta como un elemento de menú normal y no muestra el widget. - Agrega una acción al logotipo de la aplicación y reemplázalo por un logotipo personalizado.
Al logotipo de la aplicación se le asigna automáticamente el ID de
android.R.id.home
, que el sistema entrega a la devolución de llamadaonOptionsItemSelected()
de tu actividad cuando se toca. Simplemente responde a este ID en tu devolución de llamada método para realizar una acción, como ir a la “página principal” de tu aplicación actividad.Para reemplazar el ícono por un logotipo, especifica el logotipo de tu aplicación en el archivo de manifiesto con el
android:logo
y, luego, llama asetDisplayUseLogoEnabled(true)
en tu actividad. - Cómo agregar rutas de navegación para navegar hacia atrás por la pila de actividades de fragmentos
- Cómo agregar pestañas o una lista desplegable para navegar por los fragmentos
- Personaliza la barra de acción con temas y fondos
La barra de acción es estándar para todas las aplicaciones que usan el nuevo tema holográfico, que es
también es estándar cuando estableces android:minSdkVersion
o android:targetSdkVersion
en "11"
.
Para obtener más información sobre la barra de acciones, consulta la documentación sobre la barra de acciones. Varios Las muestras también están disponibles en el Demostraciones de la API.
Portapapeles del sistema
Las aplicaciones ahora pueden copiar y pegar datos (más allá de solo texto) hacia y desde todo el sistema. portapapeles. Los datos recortados pueden ser texto sin formato, un URI o un intent.
Al permitir que el sistema acceda a los datos que quieres que el usuario copie, a través de un proveedor de contenido, el usuario puede copiar contenido complejo (como una imagen o estructura de datos) de tu aplicación y y pégalo en otra aplicación que admita ese tipo de contenido.
Para comenzar a usar el portapapeles, obtén el objeto ClipboardManager
global.
llamando a getSystemService(CLIPBOARD_SERVICE)
.
Para copiar un elemento en el portapapeles, debes crear un nuevo objeto ClipData
, que contenga uno o más ClipData.Item
.
objetos en los que cada uno describe una entidad única. Crea un objeto ClipData
.
que contiene solo un ClipData.Item
, puedes usar uno de los métodos auxiliares,
como newPlainText()
, newUri()
y newIntent()
, que muestran un objeto ClipData
precargado con el
ClipData.Item
que proporciones.
Para agregar el ClipData
al portapapeles, pásalo a setPrimaryClip()
para tu instancia de ClipboardManager
.
Luego, puedes leer un archivo desde el portapapeles (para pegarlo) llamando a getPrimaryClip()
en ClipboardManager
. Puedes administrar los ClipData
que recibes
puede ser complicado y debes asegurarte de que realmente puedes controlar el tipo de datos del portapapeles
antes de intentar pegarla.
El portapapeles retiene solo un dato recortado (una ClipData
objeto) a la vez, pero un objeto ClipData
puede contener varios ClipData.Item
.
Para obtener más información, consulta el artículo Copia and Paste. También puedes ver una implementación simple de copiar y pegar en las Demostraciones de la API. y una implementación más completa en la muestra del Bloc de notas.
Arrastrar y soltar
Las nuevas API simplifican las operaciones de arrastrar y soltar en la interfaz de usuario de tu aplicación. Un arrastre
es la transferencia de algún tipo de datos que se lleva a cabo en un ClipData
objeto, de un lugar a otro. El punto de inicio y fin de la operación de arrastre es View
, de modo que las APIs que controlan directamente las operaciones de arrastrar y soltar son
en la clase View
Una operación de arrastrar y soltar tiene un ciclo de vida definido por varias acciones de arrastre: cada una
definido por un objeto DragEvent
, como ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
y
ACTION_DROP
Cada vista que quiera participar en un arrastre
puede escuchar estas acciones.
Para comenzar a arrastrar contenido en tu actividad, llama a startDrag()
.
en un View
, lo que proporciona un objeto ClipData
que representa
los datos que se arrastrarán, un View.DragShadowBuilder
para facilitar la "sombra"
que los usuarios ven debajo de sus dedos mientras arrastran, y un Object
que puede compartir
información sobre el objeto de arrastre con vistas que puedan recibirlo.
Para aceptar un objeto de arrastre en un objeto View
(recibir la "soltar"), registra la vista
con un OnDragListener
llamando a setOnDragListener()
. Cuando se produce un evento de arrastre en la vista, el
El sistema llama a onDrag()
para el OnDragListener
, que recibe un DragEvent
.
que describen el tipo de acción de arrastre que se realizó (por ejemplo, ACTION_DRAG_STARTED
, ACTION_DRAG_ENTERED
y
ACTION_DROP
). Durante el arrastre, el sistema llama de manera reiterada a onDrag()
para la vista que aparece debajo del arrastre, para proporcionar una
flujo continuo de eventos de arrastre. La vista receptora puede solicitar el tipo de evento entregado a onDragEvent()
llamando a getAction()
en DragEvent
.
Nota: Si bien un evento de arrastre puede llevar un objeto ClipData
, esto no está relacionado con el portapapeles del sistema. Una acción de arrastrar y soltar
nunca debería colocar los datos arrastrados en el portapapeles del sistema.
Para obtener más información, lee el artículo Arrastrar y Soltar la documentación. También puedes ver una implementación de arrastrar y soltar en la Demostraciones de API y la Galería de Honeycomb y mantener la integridad de su aplicación.
Widgets de apps
Android 3.0 admite varias clases de widgets nuevas para crear widgets de apps más interactivos para los usuarios.
Pantalla principal, incluidos GridView
, ListView
, StackView
, ViewFlipper
y AdapterViewFlipper
.
Lo más importante es que puedes usar el nuevo RemoteViewsService
para crear una app
widgets con colecciones, con widgets como GridView
, ListView
y StackView
respaldados por datos remotos
como un proveedor de contenido.
La clase AppWidgetProviderInfo
(definida en XML con un elemento <appwidget-provider>
) también admite dos campos nuevos: autoAdvanceViewId
y previewImage
. El campo autoAdvanceViewId
te permite especificar el ID de vista de la
subvista del widget de la app que el host del widget de la app debe hacer avanzar automáticamente. El
El campo previewImage
especifica una vista previa de lo que
el widget de la app se ve y se muestra al usuario desde el selector de widgets. Si este campo no es
se proporciona, el ícono del widget de la app se usa para la vista previa.
Para ayudar a crear una imagen de vista previa para el widget de tu app (para especificar en el campo previewImage
), el emulador de Android incluye un elemento
llamada "Vista previa del widget". Para crear una imagen de vista previa, inicia la aplicación, selecciona
para tu aplicación y configúralo como quieres que aparezca la imagen de vista previa. Luego, guárdalo
y colocarla en los recursos de elementos de diseño de tu aplicación.
Puedes ver una implementación de las nuevas funciones del widget de la app en el widget de la app de StackView y el widget de la lista del clima. aplicaciones.
Notificaciones de la barra de estado
Se extendieron las APIs de Notification
para admitir un estado con mucho contenido
de la barra de notificaciones, además de una nueva clase de Notification.Builder
que te permite
crear objetos Notification
Las nuevas funciones incluyen las siguientes:
- Compatibilidad con un ícono grande en la notificación, con
setLargeIcon()
. Por lo general, es para aplicaciones sociales para mostrar la foto de contacto de la persona que es la fuente del o para que las apps de música muestren la miniatura de un álbum. - Compatibilidad con diseños personalizados en el visor de la barra de estado mediante
setTicker()
- Se agregó compatibilidad con diseños de notificaciones personalizados para incluir botones con elementos
PendingIntent
para crear widgets de notificación más interactivos. Por ejemplo, un puede controlar la reproducción de música sin iniciar una actividad.
Cargadores de contenido
Las nuevas APIs de framework facilitan la carga asíncrona de datos usando la clase Loader
. Puedes usarlo en combinación con componentes de la interfaz de usuario, como las vistas y
para cargar datos de forma dinámica desde subprocesos de trabajo. La subclase CursorLoader
está especialmente diseñada para ayudarte a hacerlo en el caso de los datos respaldados por
un elemento ContentProvider
.
Lo único que debes hacer es implementar la interfaz LoaderCallbacks
para recibir devoluciones de llamada cuando se solicite un cargador nuevo o cuando los datos tengan
y, luego, llama a initLoader()
para inicializar el
loader para tu actividad o fragmento.
Para obtener más información, consulta la documentación sobre Cargadores. También puedes ver código de ejemplo con cargadores en el LoaderCursor y LoaderThrottle.
Bluetooth A2DP y APIs de auriculares
Android ahora incluye APIs para aplicaciones que verifican el estado del Bluetooth A2DP conectado y perfil de auriculares. Por ejemplo, las aplicaciones pueden identificar cuando los auriculares Bluetooth conectadas para escuchar música y notificar al usuario según corresponda. Las aplicaciones también pueden recibir para comandos de AT específicos del proveedor y notificar al usuario sobre el estado de la conexión dispositivo, como cuando la batería del dispositivo conectado está baja.
Puedes inicializar el BluetoothProfile
respectivo llamando a getProfileProxy()
con A2DP
o HEADSET
.
constante de perfil y una BluetoothProfile.ServiceListener
para recibir
cuando el cliente Bluetooth se conecta o desconecta.
Framework de animación
Un nuevo marco de trabajo de animación flexible te permite animar propiedades arbitrarias de cualquier objeto (Vista, elemento de diseño, fragmento, objeto o cualquier otra opción). Te permite definir varios aspectos de un una animación, por ejemplo:
- Duración
- Cantidad y comportamiento repetidos
- Tipo de interpolación de tiempo
- El animador se configura para reproducir animaciones juntas, de forma secuencial o después de retrasos específicos.
- Retraso en la actualización de fotogramas
Puedes definir estos aspectos de animación, entre otros, para los valores int, float y hexadecimal de un objeto
valores de color de forma predeterminada. Es decir, cuando un objeto tiene un campo de propiedad para uno de estos tipos,
puede cambiar su valor con el tiempo para afectar una animación. Para animar cualquier otro tipo de valor, le dices
al sistema cómo calcular los valores para ese tipo determinado implementando la interfaz TypeEvaluator
.
Hay dos animadores que puedes usar para animar los valores de una propiedad: ValueAnimator
y ObjectAnimator
. ValueAnimator
calcula los valores de la animación, pero no tiene conocimiento de los
objeto o propiedad que está animado como resultado. Simplemente realiza los cálculos, y debes
escuchar las actualizaciones y procesar los datos con tu propia lógica. ObjectAnimator
es una subclase de ValueAnimator
y
le permite configurar el objeto y la propiedad para animar, y controla todo el trabajo de animación.
Es decir, se le da a ObjectAnimator
el objeto que desea animar, el
del objeto que cambie con el tiempo y un conjunto de valores para aplicar a la propiedad durante
y, luego, inicia la animación.
Además, la clase LayoutTransition
habilita la transición automática
animaciones para los cambios que realices en el diseño de tu actividad. Para habilitar transiciones para una parte de la
diseño, crea un objeto LayoutTransition
y configúralo en
cualquier ViewGroup
llamando a setLayoutTransition()
. Esto hace que la configuración predeterminada
animaciones que se ejecutarán cada vez que se agreguen elementos al grupo o se quiten de él. Para especificar
animaciones, llama a setAnimator()
en el LayoutTransition
y proporciona un Animator
personalizado.
como ValueAnimator
o ObjectAnimator
que mencionamos anteriormente.
Para obtener más información, consulta la documentación de Animación de propiedades. Puedes Consulta también varios ejemplos con las APIs de Animation en la API Demostraciones de la app.
Framework de IU extendido
- Selección de opción múltiple para ListView y GridView
El nuevo modo
CHOICE_MODE_MULTIPLE_MODAL
parasetChoiceMode()
permite a los usuarios seleccionar varios elementos desde unListView
oGridView
. Cuando se usa en junto con la barra de acciones, los usuarios pueden seleccionar varios elementos y luego seleccionar la acción que realizar a partir de una lista de opciones en la barra de acciones (que se transformó en una el Modo de acción).Para habilitar la selección de opción múltiple, llama a
setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)
y registra unMultiChoiceModeListener
consetMultiChoiceModeListener()
.Cuando el usuario mantiene presionado un elemento, la barra de acciones cambia a la opción de opción múltiple. Modo de acción. Cuando se seleccionan elementos, el sistema notifica a
MultiChoiceModeListener
llamando aonItemCheckedStateChanged()
.Para ver un ejemplo de selección de opción múltiple, consulta la Lista15. Java en la aplicación de muestra API Demos.
- Nuevas APIs para transformar vistas
Las nuevas APIs te permiten aplicar fácilmente transformaciones en 2D y 3D a las vistas de tu actividad . Se pueden crear transformaciones nuevas con un conjunto de propiedades de objeto que definen la la posición del diseño, la orientación, la transparencia y mucho más.
Entre los nuevos métodos para establecer las propiedades de la vista, se incluyen los siguientes:
setAlpha()
,setBottom()
,setLeft()
,setRight()
,setBottom()
,setPivotX()
,setPivotY()
,setRotationX()
,setRotationY()
,setScaleX()
,setScaleY()
,setAlpha()
y otros.Algunos métodos también tienen un atributo XML correspondiente que puedes especificar en tu diseño. para aplicar una transformación predeterminada. Entre los atributos disponibles, se incluyen los siguientes:
translationX
,translationY
,rotation
,rotationX
,rotationY
,scaleX
,scaleY
ytransformPivotX
,transformPivotY
yalpha
.Usar algunas de estas nuevas propiedades de vista en combinación con el nuevo marco de animación (explicado arriba), puedes aplicar fácilmente algunas animaciones elegantes a tus vistas. Por ejemplo, para rotar un en su eje Y, suministra
ObjectAnimator
con laView
, la columna "rotationY" y los valores de inicio y finalización: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();
- Nuevos temas holográficos
Se rediseñaron los widgets estándares del sistema y la apariencia general para incorporar un nuevo "holográfico" de la interfaz de usuario. El sistema aplica el tema nuevo. usando el sistema estándar de estilo y tema.
Cualquier aplicación que se oriente a la plataforma de Android 3.0 mediante la configuración de
android:minSdkVersion
o el valorandroid:targetSdkVersion
en"11"
, hereda el tema holográfico de forma predeterminada. Sin embargo, si tu aplicación también aplica su propio tema, este anulará el el tema holográfico, a menos que actualices los estilos para que hereden el tema holográfico.Para aplicar el tema holográfico a actividades individuales o heredarlas en tu propio tema definiciones, usa una de varias
Theme.Holo
nuevas temas. Si tu aplicación es compatible con una versión de Android anterior a la 3.0 y se aplica temas personalizados, deberías seleccionar un tema según la plataforma versión. - Widgets nuevos
AdapterViewAnimator
Clase base para un objeto
AdapterView
que realiza animaciones cuando se realiza un cambio entre sus vistas.AdapterViewFlipper
ViewAnimator
simple que anima entre dos o más vistas que tienen se le agregó. Solo se muestra un elemento secundario a la vez. Si se solicita, puede girarla automáticamente entre cada elemento secundario a intervalos regulares.CalendarView
Permite a los usuarios seleccionar fechas de un calendario al tocar la fecha y pueden desplazarse o arrastrar y soltar calendario en una fecha deseada. Puedes configurar el período disponible en el widget.
ListPopupWindow
Se ancla a una vista de host y muestra una lista de opciones, como una lista de sugerencias cuando escribes en una vista
EditText
.NumberPicker
Permite al usuario seleccionar un número de un rango predefinido. El widget presenta una entrada y los botones arriba y abajo para seleccionar un número. Tocar el campo de entrada le permite al usuario desplázate por los valores o vuelve a tocar para editar directamente el valor actual. También te permite asignar posiciones a cadenas, de modo que se muestre la cadena correspondiente en lugar del índice posición.
PopupMenu
Muestra un
Menu
en una ventana emergente modal que está anclada a una vista. El aparecerá una ventana emergente debajo de la vista de anclaje si hay espacio o, si no lo hay, sobre ella. Si el IME (blando teclado) está visible, la ventana emergente no se superpone al IME hasta que el usuario toca el .SearchView
Proporciona un cuadro de búsqueda que puedes configurar para enviar consultas de búsqueda a un actividad y mostrar sugerencias de búsqueda (de la misma manera que el diálogo de búsqueda tradicional). Esta es particularmente útil para ofrecer un widget de búsqueda en la barra de acciones. Para obtener más información, consulta Cómo crear una interfaz de búsqueda.
StackView
Vista que muestra sus elementos secundarios en una pila 3D y que permite a los usuarios deslizar el dedo para como un fichero.
Gráficos
- Gráficos 2D acelerados por hardware
Ahora puedes habilitar el procesador OpenGL para tu aplicación configurando
android:hardwareAccelerated="true"
en<application>
del elemento del manifiesto. o para<activity>
individuales o de terceros.Esta marca ayuda a las aplicaciones haciéndolas que se dibujen más rápido. Como resultado, se obtienen animaciones más fluidas, un desplazamiento más fluido, así como un mejor rendimiento y una mejor respuesta a la interacción del usuario.
- Consulta la compatibilidad con capas de hardware y software
De forma predeterminada, un
View
no tiene ninguna capa especificada. Puedes especificar que el estar respaldada por una capa de hardware o software, especificada por los valoresLAYER_TYPE_HARDWARE
yLAYER_TYPE_SOFTWARE
, consetLayerType()
o lalayerType
.Una capa de hardware está respaldada por una textura específica de hardware (generalmente, objetos Frame Buffer o FBO en hardware OpenGL) y hace que la vista se renderice con la renderización del hardware de Android. pero solo si la aceleración de hardware está activada para la jerarquía de vistas. Cuando el hardware está desactivada, las capas de hardware se comportan exactamente como las capas de software.
Una capa de software está respaldada por un mapa de bits y hace que la vista se renderice con la de procesamiento de software, incluso si la aceleración de hardware está habilitada. Las capas de software deben y evitarse cuando el árbol de vistas afectado se actualiza con frecuencia. Cada actualización requerirá que se vuelva a renderizar el capa de software, que puede ser lenta.
Para obtener más información, consulta la documentación de
LAYER_TYPE_HARDWARE
yLAYER_TYPE_SOFTWARE
. - Motor de gráficos 3D de Renderscript
Renderscript es un framework 3D de entorno de ejecución que proporciona una API para crear escenas en 3D. como un lenguaje de sombreador especial e independiente de la plataforma para obtener el máximo rendimiento. Con Renderscript, puedes pueden acelerar las operaciones gráficas y el procesamiento de datos. Renderscript es una forma ideal de crear efectos 3D de alto rendimiento para aplicaciones, fondos de pantalla, carruseles y mucho más.
Para obtener más información, consulta el artículo Procesamiento y procesamiento 3D con Renderscript.
Contenido multimedia
- Video en time lapse
Las API de Camcorder ahora admiten la capacidad de grabar video en time lapse. El
setCaptureRate()
establece la velocidad a la que los fotogramas debe capturarse. - Compatibilidad con texturas para transmisiones de imágenes
El nuevo
SurfaceTexture
te permite capturar una transmisión de imágenes como una OpenGL ES. textura. Llamando asetPreviewTexture()
para tuCamera
, puedes especificar elSurfaceTexture
sobre el que se dibujará la reproducción de video o los fotogramas de vista previa de la cámara. - HTTP Live Streaming
Las aplicaciones ahora pueden pasar la URL de una playlist de M3U al framework de medios para iniciar una transmisión en vivo de HTTP. de transmisión continua. El framework de medios admite la mayor parte de la especificación de transmisión en vivo HTTP, incluida la tasa de bits adaptable. Consulta el documento Formatos de medios compatibles para obtener más información.
- Datos EXIF
ExifInterface
incluye nuevos campos de apertura fotográfica, ISO y exposición. tiempo. - Perfiles de videocámara
Nuevo método
hasProfile()
y varios videos los perfiles de calidad (comoQUALITY_1080P
,QUALITY_720P
,QUALITY_CIF
y otros) te permiten determinar la videocámara opciones de calidad. - Transferencia de archivos multimedia digitales
La plataforma incluye compatibilidad integrada con el Protocolo de transferencia de medios/imágenes (MTP/PTP) a través de USB, que permite a los usuarios transferir fácilmente cualquier tipo de archivo multimedia entre dispositivos y a una computadora host. Los desarrolladores pueden aprovechar esta compatibilidad y crear aplicaciones que permiten a los usuarios crear o administrar aplicaciones archivos multimedia que quieran transferir o compartir entre dispositivos.
- Administración de derechos digitales (DRM)
Nuevo marco de administración de derechos digitales (DRM) extensible para comprobar y aplicar de manera forzosa derechos. Se implementa en dos capas de arquitectura:
- Una API de marco de DRM, que está expuesta a aplicaciones y se ejecuta a través de Dalvik VM durante aplicaciones estándar.
- Un administrador de DRM de código nativo que implementa la API de framework y expone una interfaz para DRM complementos para administrar la gestión de derechos y la desencriptación de varios esquemas de DRM.
Para los desarrolladores de aplicaciones, el framework ofrece una API abstracta y unificada que simplifica la la administración del contenido protegido. La API oculta la complejidad de las operaciones de DRM y permite que una modo de operación coherente tanto para el contenido protegido como para el desprotegido, y en una variedad de DRM y esquemas.
Para fabricantes de dispositivos, propietarios de contenido y proveedores de medios digitales de Internet, la DRM API del complemento del framework brinda un medio para agregar compatibilidad con un esquema DRM de elección en la Sistema Android, para la aplicación segura de la protección de contenido
El lanzamiento de la versión preliminar no proporciona ningún complemento de DRM nativo para comprobar y hacer cumplir la normativa digital. derechos. Sin embargo, los fabricantes de dispositivos pueden enviar complementos DRM con sus dispositivos.
Puedes encontrar todas las APIs de DRM en el paquete
android.drm
.
Compatibilidad con el teclado
- Compatibilidad con los modificadores Control, Meta, Bloq Mayús, Bloq Num y Bloqueo de desplazamiento Para obtener más información,
consulta
META_CTRL_ON
y campos relacionados. - Compatibilidad con teclados completos con estilo de escritorio, incluida la compatibilidad con teclas como Escape, Inicio, Fin,
Eliminar y otros. Para determinar si los eventos de teclas provienen de un teclado completo, haz lo siguiente:
consulta
getKeyboardType()
y buscaKeyCharacterMap.FULL
TextView
ahora admite las funciones de cortar, copiar y pegar y seleccionar todo, con las combinaciones de teclas Control + X, Control + C Control + V y Control + A. También admite RePág/AvPág, Inicio/Fin y selección de texto basada en el teclado.KeyEvent
agrega varios métodos nuevos para facilitar la verificación de la clave. del modificador de estado de forma correcta y coherente. ConsultahasModifiers(int)
,hasNoModifiers()
,metaStateHasModifiers()
,metaStateHasNoModifiers()
- Las aplicaciones pueden implementar combinaciones de teclas personalizadas a través de la subclasificación de
Activity
,Dialog
oView
y de la implementaciónonKeyShortcut()
El framework llama a este método cuando se combina una clave con la tecla Control. Cuando crees un menú de opciones, puedes registrar el teclado accesos directos estableciendo el atributoandroid:alphabeticShortcut
oandroid:numericShortcut
para cada<item>
(o consetShortcut()
). - Android 3.0 incluye un nuevo "teclado virtual" dispositivo con el ID
KeyCharacterMap.VIRTUAL_KEYBOARD
. La nube virtual El teclado tiene un mapa de teclas de EE.UU. con estilo de escritorio que es útil para sintetizar eventos de teclas para pruebas entrada.
Divide eventos táctiles
Anteriormente, solo una vista podía aceptar eventos táctiles a la vez. Android 3.0 se agrega compatibilidad para dividir eventos táctiles entre vistas e incluso ventanas, de modo que diferentes vistas puedan aceptar eventos táctiles simultáneos.
Los eventos táctiles divididos están habilitados de forma predeterminada cuando una app se orienta
Android 3.0 Es decir, cuando la aplicación configuró el android:minSdkVersion
o el valor del atributo android:targetSdkVersion
a "11"
.
Sin embargo, las siguientes propiedades te permiten inhabilitar los eventos táctiles divididos en las vistas de su interior. grupos de vistas específicos y entre ventanas.
- El atributo
android:splitMotionEvents
para los grupos de vistas te permite inhabilitar los eventos táctiles divididos que ocurren entre las vistas secundarias de un diseño. Por ejemplo:<LinearLayout android:splitMotionEvents="false" ... > ... </LinearLayout>
De esta manera, las vistas secundarias en el diseño lineal no pueden dividir eventos táctiles; solo se puede dividir una vista recibir eventos táctiles a la vez.
- La propiedad de estilo
android:windowEnableSplitTouch
te permite inhabilitar eventos táctiles divididos entre ventanas, aplicándolos a un tema para la actividad. o toda la aplicación. Por ejemplo:<style name="NoSplitMotionEvents" parent="android:Theme.Holo"> <item name="android:windowEnableSplitTouch">false</item> ... </style>
Cuando se aplica este tema a un elemento
<activity>
o<application>
, ocurre lo siguiente: Solo se aceptan eventos táctiles dentro de la ventana de la actividad actual. Por ejemplo, si inhabilitas la división eventos táctiles entre ventanas, la barra del sistema no puede recibir eventos táctiles al mismo tiempo que actividad. Esto no afecta si las vistas dentro de la actividad pueden dividir el tacto. eventos táctiles; de forma predeterminada, la actividad aún puede dividir los eventos táctiles entre las vistas.Para obtener más información sobre cómo crear un tema, consulta Cómo aplicar estilos y temas.
WebKit
- Nueva clase
WebViewFragment
para crear un fragmento compuesto por unaWebView
- Nuevos métodos
WebSettings
:setDisplayZoomControls()
te permite ocultar los controles de zoom en pantalla y que, a su vez, le permiten al usuario hacer zoom con gestos del dedo (se debe establecer el valorsetBuiltInZoomControls()
)true
).- El nuevo método
WebSettings
,setEnableSmoothTransition()
, te permite para permitir transiciones fluidas durante el desplazamiento lateral y el zoom. Cuando se habilita esta función, WebView elegirá una solución. para maximizar el rendimiento (por ejemplo, es posible que el contenido de WebView no se actualice durante la transición).
- Nuevos métodos
WebView
:- Devolución de llamada
onPause()
, para pausar cualquier procesamiento que se asocia con el WebView cuando se oculta. Esto es útil para reducir las cargas de CPU cuando la WebView no está en primer plano. - Devolución de llamada
onResume()
para reanudar el procesamiento asociado con WebView, que se detuvo duranteonPause()
. saveWebArchive()
te permite guardar el vista actual como archivo web en el dispositivo.showFindDialog()
inicia una búsqueda de texto en la vista actual.
- Devolución de llamada
Navegador
La aplicación del navegador agrega las siguientes funciones para admitir aplicaciones web:
- Captura de contenido multimedia
Según se define en la captura de medios HTML el navegador permite que las aplicaciones web accedan a la captura de audio, de imágenes y de video del dispositivo. Por ejemplo, el siguiente código HTML proporciona una entrada para que el usuario capturar una foto para subirla:
<input type="file" accept="image/*;capture=camera" />
O bien, al excluir el parámetro
capture=camera
, el usuario puede optar por capturar un imagen nueva con la cámara o selecciona una del dispositivo (por ejemplo, desde la aplicación Galería). - Orientación del dispositivo
Según se define en el evento de orientación del dispositivo especificación, el navegador permite que las aplicaciones web escuchen los eventos del DOM que proporcionan información sobre la orientación física y el movimiento del dispositivo.
La orientación del dispositivo se expresa con los ejes x, y, y z, en grados, y el movimiento es expresada con datos de aceleración y velocidad de rotación. Una página web puede registrarse para orientación eventos llamando a
window.addEventListener
con el tipo de evento"deviceorientation"
y registrarte para los eventos de movimiento registrando el tipo de evento"devicemotion"
. - Transformaciones de CSS 3D
Según se define en la Transformación CSS 3D adicional, el navegador permite que los elementos que renderiza CSS se transformen en tres dimensiones.
Utilidades JSON
Las nuevas clases, JsonReader
y JsonWriter
, te ayudan
pueden leer y escribir transmisiones JSON. Las nuevas APIs complementan las clases org.json
, que manipulan
un documento en la memoria.
Para crear una instancia de JsonReader
, llama a
su método de constructor y pasa el InputStreamReader
que alimenta la cadena JSON.
Luego, comienza a leer un objeto llamando a beginObject()
, lee un
el nombre de la clave con nextName()
, lee el valor con métodos
respectivo al tipo, como nextString()
y nextInt()
, y continúa haciéndolo mientras hasNext()
es verdadero.
Puedes crear una instancia de JsonWriter
llamando a su constructor y
pasando el OutputStreamWriter
adecuado Luego, escribe los datos JSON
similar al lector, con name()
para agregar un nombre de propiedad
y un método value()
apropiado para agregar las respectivas
valor.
Estas clases son estrictas de forma predeterminada. El setLenient()
de cada clase las configura para que sean más generosas en cuanto a lo que aceptan. Este tolerante
El modo de análisis también es compatible con el analizador predeterminado de org.json
.
Nuevas constantes de funciones
La <uses-feature>
un elemento de manifiesto debe usarse para informar a las entidades externas (como Google Play) del conjunto de
las funciones de hardware y software
de las que depende tu aplicación. En esta versión, Android incorpora
las siguientes constantes nuevas que las aplicaciones pueden declarar con este elemento:
"android.hardware.faketouch"
Si se declara, esto indica que la aplicación es compatible con un dispositivo que ofrece un una pantalla táctil emulada (o una mejor). Un dispositivo que ofrece una pantalla táctil emulada proporciona una entrada al usuario. que puede emular un subconjunto de pantallas capacidades de integración. Un ejemplo de este sistema de entrada es un mouse o un control remoto que haga funcionar una el cursor en pantalla. Estos sistemas de entrada admiten eventos táctiles básicos, como hacer clic hacia abajo, clic hacia arriba y arrastrar. Sin embargo, los tipos de entrada más complicados (como gestos, deslizamientos, etc.) pueden ser más difíciles o imposible en dispositivos táctiles falsos (y los gestos multitáctiles definitivamente no son posibles).
Si tu aplicación no requiere gestos complicados y no quieres que tu aplicación se filtre de los dispositivos con una pantalla táctil emulada, debes declarar
"android.hardware.faketouch"
con un<uses-feature>
. Así, tu aplicación estará disponible para la mayor cantidad de tipos de dispositivos incluidas las que proporcionan solo una entrada de pantalla táctil emulada.Todos los dispositivos que incluyen pantalla táctil también admiten
"android.hardware.faketouch"
, porque las capacidades de la pantalla táctil son un superconjunto de capacidades de fake-touch. Por eso, a menos que realmente necesites una pantalla táctil, debes agregar un<uses-feature>
para faketouch.
Permisos nuevos
"android.permission.BIND_REMOTEVIEWS"
Se debe declarar como un permiso obligatorio en el manifiesto de
<service>
. para una implementación deRemoteViewsService
. Por ejemplo, cuando Crear un widget de una app que useRemoteViewsService
para propagar vista de colección, es posible que la entrada del manifiesto se vea de la siguiente manera:<service android:name=".widget.WidgetService" android:exported="false" android:permission="android.permission.BIND_REMOTEVIEWS" />
Nuevas tecnologías de la plataforma
- Almacenamiento
- Compatibilidad con el sistema de archivos ext4 para habilitar el almacenamiento de eMMC integrado
- Sistema de archivos FUSE para admitir dispositivos MTP.
- Se admite el modo de host USB para brindar compatibilidad con teclados y concentradores USB.
- Compatibilidad con MTP/PTP
- Kernel de Linux
- Se actualizó a la versión 2.6.36
- Máquina virtual Dalvik
- Nuevo código para admitir y optimizar SMP
- Se implementaron varias mejoras en la infraestructura de JIT.
- Mejoras en el recolector de elementos no utilizados:
- Ajustado para SMP
- Compatibilidad con tamaños de montón más grandes
- Control unificado para mapas de bits y búferes de bytes
- Bibliotecas de Dalvik Core
- Implementación nueva y mucho más rápida de NIO (biblioteca moderna de E/S)
- Mensajes de excepción mejorados
- Corrección de la precisión y el rendimiento a lo largo del proceso
Informe de diferencias de API
Para obtener una vista detallada de todos los cambios de la API en Android 3.0 (API nivel 11), consulta el Informe de diferencias de las APIs.
Nivel de API
La plataforma Android 3.0 ofrece una versión actualizada de la API del framework. La API de Android 3.0 se le asigna un identificador de número entero, 11, es decir, almacenados en el sistema. Este identificador, llamado “nivel de API”, permite que la para determinar de forma correcta si una aplicación es compatible con en el sistema antes de instalar la aplicación.
Para usar en tu aplicación las APIs que se introdujeron en Android 3.0,
debes compilar la aplicación en la biblioteca de Android que se proporciona en
la plataforma del SDK de Android 3.0. Según tus necesidades, podrías
también debes agregar un android:minSdkVersion="11"
al elemento <uses-sdk>
en la carpeta de la aplicación
. Si tu aplicación está diseñada para ejecutarse solo en Android 2.3 y versiones posteriores,
La declaración del atributo impide que la aplicación se instale anteriormente
más recientes de la plataforma.
Para obtener más información, consulta Qué es la API nivel?