APIs de Android 3.2

Nivel de API: 13

Android 3.2 (HONEYCOMB_MR2) es una versión incremental de la plataforma que agrega nuevas funciones para usuarios y desarrolladores. En las siguientes secciones, se proporciona una descripción general de las nuevas funciones y APIs para desarrolladores.

Para los desarrolladores, la plataforma Android 3.2 está disponible como un componente descargable del SDK de Android. La plataforma descargable incluye una imagen del sistema y una biblioteca de Android, así como un conjunto de máscaras de emulador y mucho más. Para comenzar a desarrollar o probar Android 3.2, usa Android SDK Manager para descargar la plataforma en tu SDK.

Aspectos destacados de la plataforma

Nuevas funciones del usuario

  • Optimizaciones para una gama más amplia de tablets

    Android 3.2 incluye una variedad de optimizaciones en el sistema para garantizar una excelente experiencia del usuario en una gama más amplia de tablets.

  • Zoom de compatibilidad para apps de tamaño fijo

    Android 3.2 presenta un nuevo modo de zoom de compatibilidad que brinda a los usuarios una nueva forma de ver apps de tamaño fijo en dispositivos más grandes. El nuevo modo proporciona una alternativa con escala de píxeles a la estiramiento de la IU estándar para apps que no están diseñadas para ejecutarse en tamaños de pantalla más grandes, como en las tablets. Los usuarios pueden acceder al nuevo modo desde un ícono de menú en la barra del sistema para las apps que necesitan compatibilidad.

  • Sincronización de contenido multimedia desde la tarjeta SD

    En dispositivos compatibles con tarjetas SD, los usuarios ahora pueden cargar archivos multimedia directamente desde la tarjeta SD a las apps que los usan. Una instalación del sistema permite que las apps accedan a los archivos desde la tienda de contenido multimedia del sistema.

Nuevas funciones para desarrolladores

  • API extendida para administrar pantallas

    Android 3.2 presenta extensiones en la API de compatibilidad de pantalla de la plataforma para ofrecer a los desarrolladores formas adicionales de administrar la IU de la aplicación en toda la gama de dispositivos con tecnología Android. La API incluye nuevos calificadores de recursos y nuevos atributos de manifiesto que te brindan un control más preciso sobre cómo se muestran tus apps en diferentes tamaños, en lugar de depender de categorías de tamaño generalizadas.

    Para garantizar la mejor visualización posible para apps de tamaño fijo y apps con compatibilidad limitada con varios tamaños de pantalla, la plataforma también proporciona un nuevo modo de compatibilidad de zoom que renderiza la IU en un área de pantalla más pequeña y la escala para llenar el espacio disponible en la pantalla. Para obtener más información sobre la API de compatibilidad de pantallas y los controles que proporciona, consulta las siguientes secciones.

Descripción general de la API

APIs de compatibilidad de pantallas

Android 3.2 presenta nuevas pantallas compatibles con APIs que te brindan más control sobre cómo se muestran sus aplicaciones en diferentes tamaños de pantalla. La API se basa en la API de compatibilidad de pantallas existente, incluido el modelo generalizado de densidad de pantalla de la plataforma, pero lo extiende con la capacidad de orientarse con precisión a rangos de pantalla específicos según sus dimensiones, medidas en unidades de píxeles independientes de la densidad (como 600 dp o 720 dp de ancho), en lugar de los tamaños generalizados (como grande o extragrande).

Cuando diseñas la IU de una aplicación, aún puedes confiar en la plataforma para proporcionar abstracción de densidad, lo que significa que las aplicaciones no necesitan compensar las diferencias en la densidad de píxeles real entre los dispositivos. Puedes diseñar la IU de la aplicación en función de la cantidad de espacio horizontal o vertical disponible. La plataforma expresa la cantidad de espacio disponible mediante tres características nuevas: smallestWidth, width y height.

  • El smallestWidth de una pantalla es su tamaño mínimo fundamental, que se mide en unidades de píxeles independientes de la densidad ("dp"). Del ancho o alto de la pantalla, es el más corto de los dos. Para una pantalla en orientación vertical, el smallestWidth normalmente se basa en su ancho, mientras que en la orientación horizontal se basa en su altura. En todos los casos, el smallestWidth se deriva de una característica fija de la pantalla y el valor no cambia, independientemente de la orientación. El smallestWidth es importante para las aplicaciones porque representa el ancho más corto posible en el que se deberá dibujar la IU de la aplicación, sin incluir las áreas de la pantalla que reserva el sistema.
  • Por el contrario, el ancho y la altura de una pantalla representan el espacio horizontal o vertical actual disponible para el diseño de la aplicación, medido en unidades "dp", sin incluir las áreas de la pantalla reservadas por el sistema. El ancho y la altura de una pantalla cambian cuando el usuario cambia la orientación entre horizontal y vertical.

La nueva API de compatibilidad de pantallas está diseñada para permitirte administrar la IU de la aplicación según el smallestWidth de la pantalla actual. También puedes administrar la IU en función del ancho o la altura actuales, según sea necesario. Para esos fines, la API proporciona las siguientes herramientas:

  • Nuevos calificadores de recursos para orientar diseños y otros recursos a un smallestWidth, el ancho o la altura mínimos, y
  • Nuevos atributos del manifiesto para especificar el rango máximo de compatibilidad de pantallas de la app

Además, las aplicaciones aún pueden consultar el sistema y administrar la IU y la carga de recursos en el entorno de ejecución, al igual que en las versiones anteriores de la plataforma.

Dado que la nueva API te permite orientar pantallas de manera más directa a través de smallestWidth, el ancho y la altura, es útil comprender las características típicas de los diferentes tipos de pantalla. En la siguiente tabla, se proporcionan algunos ejemplos, medidos en unidades "dp".

Tabla 1: Dispositivos típicos, con densidad y tamaño en dp.

Tipo Densidad (generalizada) Dimensiones (dp) smallestWidth (dp)
Teléfono de referencia mdpi 320 × 480 320
Tablet pequeña/teléfono grande mdpi 480 × 800 480
Tablet de 7 pulgadas mdpi 600 x 1,024 600
Tablet de 10 pulgadas mdpi 800 x 1,280 800

En las siguientes secciones, se proporciona más información sobre los nuevos calificadores de pantalla y atributos del manifiesto. Para obtener información completa sobre el uso de la API de compatibilidad de pantalla, consulta Compatibilidad con diferentes pantallas.

Nuevos calificadores de recursos para la compatibilidad con pantallas

Los nuevos calificadores de recursos de Android 3.2 te permiten orientar mejor tus diseños para rangos de tamaños de pantalla. Con los calificadores, puedes crear configuraciones de recursos diseñadas para un smallestWidth mínimo específico, un ancho actual o una altura actual, medida en píxeles independientes de la densidad.

Los nuevos calificadores son:

  • swNNNdp: Especifica el smallestWidth mínimo en el que se debe usar el recurso; se mide en unidades "dp". Como se mencionó anteriormente, el smallestWidth de una pantalla es constante, independientemente de la orientación. Ejemplos: sw320dp, sw720dp y sw720dp.
  • wNNNdp y hNNNdp: Especifican el ancho o la altura mínimos en los que se debe usar el recurso, medidos en unidades "dp". Como se mencionó anteriormente, el ancho y la altura de una pantalla son relativos a su orientación y cambian siempre que esta cambie. Ejemplos: w320dp, w720dp y h1024dp.

También puedes crear varias configuraciones de recursos superpuestos si es necesario. Por ejemplo, puedes etiquetar algunos recursos para usarlos en cualquier pantalla con un ancho superior a 480 dp, otros para un ancho superior a 600 dp y otros para un ancho superior a 720 dp. Cuando se califican varias configuraciones de recursos para una pantalla determinada, el sistema selecciona la configuración más cercana. Para lograr un control preciso de los recursos que se cargan en una pantalla determinada, puedes etiquetar los recursos con un calificador o combinar varios calificadores nuevos o existentes.

Según las dimensiones típicas enumeradas anteriormente, a continuación, se incluyen algunos ejemplos de cómo podrías usar los nuevos calificadores:

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

Las versiones anteriores de la plataforma ignorarán los calificadores nuevos, por lo que puedes combinarlos según sea necesario para asegurarte de que tu app se vea bien en cualquier dispositivo. Estos son algunos ejemplos:

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

Para obtener información completa sobre el uso de los nuevos calificadores, consulta Cómo utilizar nuevos calificadores de tamaño.

Nuevos atributos de manifiesto para la compatibilidad con el tamaño de pantalla

El framework ofrece un nuevo conjunto de atributos del manifiesto de <supports-screens> que te permiten administrar la compatibilidad de tu app con diferentes tamaños de pantalla. Específicamente, puedes especificar las pantallas más grandes y pequeñas en las que tu app está diseñada para ejecutarse, así como la pantalla de mayor tamaño en la que está diseñada para ejecutarse sin necesidad del nuevo modo de compatibilidad de pantalla del sistema. Al igual que los calificadores de recursos descritos anteriormente, los nuevos atributos del manifiesto especifican el rango de pantallas que admite la aplicación, según lo especificado por el smallestWidth.

Los nuevos atributos del manifiesto para compatibilidad con pantallas son los siguientes:

  • android:compatibleWidthLimitDp="numDp": Este atributo te permite especificar el smallestWidth máximo en el que puede ejecutarse la aplicación sin necesidad de modo de compatibilidad. Si la pantalla actual es más grande que el valor especificado, el sistema muestra la aplicación en modo normal, pero le permite al usuario cambiar al modo de compatibilidad de manera opcional mediante una configuración en la barra del sistema.
  • android:largestWidthLimitDp="numDp": Este atributo te permite especificar el smallestWidth máximo en el que la aplicación está diseñada para ejecutarse. Si la pantalla actual es mayor que el valor especificado, el sistema fuerza la aplicación al modo de compatibilidad de pantalla para garantizar una mejor visualización en la pantalla actual.
  • android:requiresSmallestWidthDp="numDp": Este atributo te permite especificar el smallestWidth mínimo en el que se puede ejecutar la aplicación. Si la pantalla actual es más pequeña que el valor especificado, el sistema considerará que la aplicación no es compatible con el dispositivo, pero no impide que se instale y ejecute.

Nota: Por el momento, Google Play no filtra apps en función de ninguno de los atributos anteriores. La compatibilidad con el filtrado se agregará en una versión posterior de la plataforma. Las aplicaciones que requieren un filtrado en función del tamaño de la pantalla pueden usar los atributos <supports-screens> existentes.

Para obtener información completa sobre cómo usar los atributos nuevos, consulta Cómo declarar la compatibilidad con tamaños de pantalla.

Modo de compatibilidad de pantalla

Android 3.2 proporciona un nuevo modo de compatibilidad de pantalla para aplicaciones que declaran explícitamente que no admiten pantallas tan grandes como la que se ejecuta. Este nuevo modo de "zoom" tiene escala de píxeles; procesa la aplicación en un área de pantalla más pequeña y, luego, ajusta los píxeles para llenar la pantalla actual.

De forma predeterminada, el sistema ofrece el modo de compatibilidad de pantalla como opción del usuario para las apps que lo requieren. Los usuarios pueden activar y desactivar el modo de zoom con un control disponible en la barra del sistema.

Como el nuevo modo de compatibilidad de pantalla puede no ser apropiado para todas las aplicaciones, la plataforma permite que la aplicación lo inhabilite mediante atributos de manifiesto. Cuando la app lo inhabilita, el sistema no ofrece el modo de compatibilidad "zoom" como opción para los usuarios cuando se está ejecutando la app.

Nota: Si quieres obtener información importante sobre cómo controlar el modo de compatibilidad en tus aplicaciones, consulta el artículo Nuevo modo para apps en pantallas grandes en el Blog para desarrolladores de Android.

Nueva densidad de pantalla para televisiones de 720p y dispositivos similares

Para satisfacer las necesidades de las aplicaciones que se ejecutan en televisiones de 720p o similares con pantallas de densidad moderada, Android 3.2 presenta una nueva densidad generalizada, tvdpi, con un DPI aproximado de 213. Las aplicaciones pueden consultar la nueva densidad en densityDpi y usar el nuevo calificador tvdpi para etiquetar recursos de televisiones y dispositivos similares. Por ejemplo:

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

En general, las aplicaciones no deberían necesitar funcionar con esta densidad. En situaciones en las que se necesita un resultado para una pantalla de 720p, la plataforma puede escalar automáticamente los elementos de la IU.

Framework de IU

  • Fragmentos
    • La nueva clase Fragment.SavedState contiene la información de estado recuperada de una instancia de fragmento mediante saveFragmentInstanceState().
    • El nuevo método saveFragmentInstanceState() guarda el estado actual de la instancia de un fragmento determinado. El estado se puede usar más adelante cuando se crea una instancia nueva del fragmento que coincida con el estado actual.
    • El nuevo método setInitialSavedState() establece el estado guardado inicial de un fragmento cuando se construye por primera vez.
    • El nuevo método de devolución de llamada onViewCreated() notifica al fragmento que onCreateView() mostró, pero antes de que se restablezca cualquier estado guardado en la View.
    • El método isDetached() determina si el fragmento se desvinculó de forma explícita de la IU.
    • Los nuevos métodos attach() y detach() permiten que una aplicación vuelva a adjuntar o desconectar fragmentos de la IU.
    • Un nuevo método de sobrecarga de setCustomAnimations() te permite configurar recursos de animación específicos para que se ejecuten en las operaciones de entrada y salida, y específicamente cuando se abre la pila de actividades. La implementación existente no tiene en cuenta el comportamiento diferente de los fragmentos cuando se abre la pila de actividades.
  • Información sobre el tamaño de pantalla en ActivityInfo y ApplicationInfo.
  • Asistentes para obtener el tamaño de la pantalla de WindowManager
    • Los nuevos métodos getSize() y getRectSize() permiten que las aplicaciones obtengan el tamaño sin procesar de la pantalla.
  • Nuevos estilos "holográficos" públicos
    • La plataforma ahora expone una variedad de estilos "holográficos" públicos para texto, widgets y pestañas de la barra de acciones, y mucho más. Consulta R.style para ver la lista completa.
  • LocalActivityManager, ActivityGroup y LocalActivityManager dejaron de estar disponibles
    • Las aplicaciones nuevas deberían usar Fragments en lugar de estas clases. Para continuar ejecutándose en versiones anteriores de la plataforma, puedes usar la biblioteca de compatibilidad v4 (biblioteca de compatibilidad), disponible en el SDK de Android. La biblioteca de compatibilidad v4 proporciona una versión de la API de Fragment compatible con Android 1.6 (nivel de API 4).
    • En el caso de las apps que se desarrollan para Android 3.0 (nivel de API 11) o versiones posteriores, las pestañas generalmente se presentan en la IU con el nuevo ActionBar.newTab() y las APIs relacionadas para colocar pestañas en el área de la barra de acciones.

Marco de trabajo multimedia

  • Las aplicaciones que utilizan el proveedor de contenido multimedia de la plataforma (MediaStore) ahora pueden leer datos multimedia directamente desde la tarjeta SD extraíble, cuando el dispositivo lo admita. Las aplicaciones también pueden interactuar con los archivos de la tarjeta SD directamente mediante la API de MTP.

Gráficos

Framework del IME

  • Se agregó un método getModifiers() nuevo para recuperar el estado actual de las teclas modificadoras.

Framework de USB

  • Nuevo método getRawDescriptors() para recuperar los descriptores USB sin procesar del dispositivo. Puedes usar este método para acceder a los descriptores que no se admiten directamente a través de las APIs de nivel superior.

Red

Telefonía

Utilidades principales

Nuevas constantes de funciones

La plataforma agrega nuevas constantes de funciones de hardware que puedes declarar en los manifiestos de la aplicación para informar a entidades externas, como Google Play, las capacidades requeridas de hardware y software. Debes declarar estas y otras constantes de funciones en los elementos del manifiesto <uses-feature>.

Google Play filtra las aplicaciones según sus atributos <uses-feature> a fin de garantizar que estén disponibles solo para los dispositivos en los que se cumplan sus requisitos.

  • Constantes de funciones para requisitos horizontales o verticales

    Android 3.2 presenta nuevas constantes de funciones que permiten a las aplicaciones especificar si deben mostrarse en orientación horizontal, vertical o ambas. La declaración de estas constantes indica que la aplicación no debe instalarse en un dispositivo que no ofrezca la orientación asociada. Por el contrario, si no se declara una o ambas constantes, esto indica que la app no tiene preferencia por las orientaciones no declaradas y se puede instalar en un dispositivo que no las ofrezca.

    Por lo general, una aplicación típica que funciona de manera correcta tanto en orientación horizontal como vertical no necesita declarar un requisito de orientación. En cambio, una aplicación diseñada principalmente para una orientación, como una app diseñada para un televisor, podría declarar una de las constantes para garantizar que no esté disponible para dispositivos que no tengan esa orientación.

    Si alguna de las actividades declaradas en el manifiesto solicita que se ejecuten en una orientación específica con el atributo android:screenOrientation, esto también declara que la aplicación requiere esa orientación.

  • Otras constantes de funciones

Informe de diferencias de las APIs

Para obtener una vista detallada de todos los cambios de la API en Android 3.2 (nivel de API 13), consulta el Informe de diferencias de la API.

Nivel de API

La plataforma de Android 3.2 entrega una versión actualizada de la API de framework. A la API de Android 3.2 se le asigna un identificador de número entero, 13, que se almacena en el propio sistema. Este identificador, denominado "nivel de API", permite que el sistema determine correctamente si una aplicación es compatible con él antes de instalarla.

Para usar APIs presentadas en Android 3.2 en tu aplicación, debes compilarla con la biblioteca de Android que se proporciona en la plataforma de SDK de Android 3.2. Según tus necesidades, es posible que también debas agregar un atributo android:minSdkVersion="13" al elemento <uses-sdk> en el manifiesto de la aplicación.

Para obtener más información, consulta ¿Qué es el nivel de API?