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 los usuarios y desarrolladores. En las siguientes secciones, se proporciona una descripción general de las nuevas funciones y las APIs para desarrolladores.

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

Aspectos destacados de la plataforma

Nuevas funciones para el usuario

  • Optimizaciones para una variedad más amplia de tablets

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

  • Zoom de compatibilidad para apps de tamaño fijo

    Android 3.2 presenta un nuevo modo de zoom de compatibilidad que les 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 a escala de píxeles para el estiramiento de la IU estándar en apps que no están diseñadas para ejecutarse en pantallas más grandes, como 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 los dispositivos compatibles con una tarjeta 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 admitir la administración de pantallas

    Android 3.2 presenta extensiones a la API de compatibilidad de pantalla de la plataforma para brindarles a los desarrolladores formas adicionales de administrar la IU de la aplicación en la variedad 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 las apps de tamaño fijo y las apps con compatibilidad limitada para varios tamaños de pantalla, la plataforma también proporciona un nuevo modo de compatibilidad con zoom que renderiza la IU en un área de pantalla más pequeña y, luego, la ajusta para que ocupe todo el espacio disponible en la pantalla. Para obtener más información sobre la API de compatibilidad de pantalla 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 API compatibles con pantallas 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 por tamaños de pantalla generalizados (como grandes o extragrandes).

Cuando diseñas la IU de una aplicació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 dispositivos. Puedes diseñar la IU de la aplicación según la cantidad de espacio horizontal o vertical disponible. La plataforma expresa la cantidad de espacio disponible con tres características nuevas: smallestWidth, width y height.

  • El smallestWidth de una pantalla es su tamaño mínimo fundamental, medido en unidades de píxeles independientes de la densidad ("dp"). De la altura o el ancho de la pantalla, es la más corta de las dos. Para una pantalla en orientación vertical, el valor de smallestWidth suele basarse en su ancho, mientras que en orientación horizontal se basa en su altura. En todos los casos, el valor smallWidth deriva de una característica fija de la pantalla y el valor no cambia, independientemente de la orientación. El valor de 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 pantalla reservadas por el sistema.
  • En cambio, 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 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 con pantallas está diseñada para permitirte administrar la IU de la aplicación según el ancho más pequeño de la pantalla actual. También puedes administrar la IU según el ancho o la altura actuales, según sea necesario. Para esos fines, la API proporciona las siguientes herramientas:

  • Nuevos calificadores de recursos para segmentar diseños y otros recursos a un width, height o smallestWidth mínimos
  • Nuevos atributos de manifiesto para especificar el rango máximo de compatibilidad de pantalla de la app

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

Dado que la nueva API te permite orientar las pantallas de forma más directa a través de los valores de ancho, ancho y altura más pequeños, resulta útil comprender las características típicas de los diferentes tipos de pantallas. En la siguiente tabla, se proporcionan algunos ejemplos, medidos en unidades de "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 o teléfono grande mdpi 480 × 800 480
Tablet de 7 pulgadas mdpi 600 × 1,024 600
Tablet de 10 pulgadas mdpi 800 × 1280 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 cómo usar la API de compatibilidad de pantalla, consulta Compatibilidad con varias 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 a rangos de tamaños de pantalla. Con los calificadores, puedes crear configuraciones de recursos diseñadas para un ancho mínimo, un ancho actual o una altura actual específicos, medidos en píxeles independientes de la densidad.

Los nuevos calificadores son los siguientes:

  • swNNNdp: Especifica el ancho más pequeño en el que se debe usar el recurso, medido en unidades "dp". Como se mencionó anteriormente, el valor de smallestWidth de una pantalla es constante, independientemente de la orientación. Ejemplos: sw320dp, sw720dp, 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 cada vez que cambia la orientación. Ejemplos: w320dp, w720dp, h1024dp.

También puedes crear varias configuraciones de recursos superpuestas si es necesario. Por ejemplo, puedes etiquetar algunos recursos para usar en cualquier pantalla con un ancho superior a 480 dp, otros con un ancho superior a 600 dp y otros con un ancho superior a 720 dp. Cuando se califican varias configuraciones de recursos para una pantalla determinada, el sistema selecciona la configuración que tiene la coincidencia más cercana. Para controlar con precisión qué recursos 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 mencionadas anteriormente, estos son 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, de modo que puedas combinarlos según sea necesario para asegurarte de que tu app se vea genial 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 acerca de cómo utilizar los calificadores nuevos, consulta Cómo utilizar nuevos calificadores de tamaño.

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

El framework ofrece un nuevo conjunto de atributos del manifiesto <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 está diseñada tu app para ejecutarse, así como la pantalla más grande 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 indica el valor lowerWidth.

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

  • android:compatibleWidthLimitDp="numDp": Este atributo te permite especificar el smallestWidth máximo en el que se puede ejecutar la aplicación sin necesidad del 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 permite que el usuario cambie al modo de compatibilidad de forma opcional a través de un parámetro de configuración en la barra del sistema.
  • android:largestWidthLimitDp="numDp": Este atributo te permite especificar el smallestWidth máximo en el que está diseñada la aplicación para ejecutarse. Si la pantalla actual es más grande que el valor especificado, el sistema fuerza a la aplicación a ingresar al modo de compatibilidad de pantalla para garantizar la 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 menor que el valor especificado, el sistema considera que la aplicación es incompatible con el dispositivo, pero no evita que se instale y ejecute.

Nota: Por el momento, Google Play no filtra las 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 filtrado en función del tamaño de 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 el tamaño de pantalla.

Modo de compatibilidad de pantalla

Android 3.2 proporciona un nuevo modo de compatibilidad de pantalla para las aplicaciones que declaran explícitamente que no son compatibles con pantallas tan grandes como la que ejecutan. Este nuevo modo de "zoom" tiene una escala de píxeles: renderiza la aplicación en un área de pantalla más pequeña y, luego, escala los píxeles para que llenen la pantalla actual.

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

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

Nota: Para 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 de desarrolladores de Android.

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

Para satisfacer las necesidades de las aplicaciones que se ejecutan en televisores de 720p o similares con pantallas de densidad moderada, Android 3.2 introduce 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 para televisores y dispositivos similares. Por ejemplo:

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

En general, las aplicaciones no deberían tener que funcionar con esta densidad. En situaciones en las que se necesita una salida 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 a través de saveFragmentInstanceState().
    • El nuevo método saveFragmentInstanceState() guarda el estado de la instancia actual del fragmento determinado. El estado se puede usar más adelante cuando se crea una instancia nueva del fragmento que coincide 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 se mostró onCreateView(), 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 separar fragmentos en la IU.
    • Un nuevo método de sobrecarga de setCustomAnimations() te permite configurar recursos de animación específicos para ejecutar en operaciones de entrada y salida, y específicamente cuando se muestra la pila de actividades. La implementación existente no tiene en cuenta el comportamiento diferente de los fragmentos cuando se quita la pila de actividades.
  • Información del tamaño de la pantalla en ActivityInfo y ApplicationInfo
  • Ayudantes 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 públicos "holográficos"
    • La plataforma ahora expone una variedad de estilos públicos "holográficos" 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 deben usar fragmentos en lugar de estas clases. Para seguir 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 que es 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 suelen presentarse en la IU con el nuevo ActionBar.newTab() y las APIs relacionadas para colocarlas dentro del área de la barra de acciones.

Marco de trabajo de medios

  • Las aplicaciones que usan el proveedor de contenido multimedia de la plataforma (MediaStore) ahora pueden leer datos multimedia directamente desde la tarjeta SD extraíble, siempre que 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 de IME

  • Nuevo método getModifiers() 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 el método para acceder a 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 las entidades externas, como Google Play, sobre las capacidades de hardware y software requeridas. Declaras estas y otras constantes de funciones en los elementos del manifiesto <uses-feature>.

Google Play filtra las aplicaciones en función de sus atributos <uses-feature> para garantizar que solo estén disponibles para los dispositivos que cumplan con sus requisitos.

  • Constantes de funciones para requisitos de orientación horizontal o vertical

    En Android 3.2, se introducen nuevas constantes de funciones que permiten que las aplicaciones especifiquen si requieren una pantalla 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 declaran una o ambas constantes, significa que la aplicación no tiene preferencia por las orientaciones no declaradas y que se puede instalar en un dispositivo que no las ofrece.

    Por lo general, una aplicación típica que funciona correctamente en orientación horizontal y 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 una televisión, podría declarar una de las constantes para garantizar que no esté disponible para dispositivos que no proporcionen esa orientación.

    Si alguna de las actividades declaradas en el manifiesto solicita que se ejecuten en una orientación específica mediante 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 las APIs.

Nivel de API

La plataforma 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, llamado "nivel de API", permite que el sistema determine correctamente si una aplicación es compatible con el sistema antes de instalarla.

Para usar las APIs presentadas en Android 3.2 en tu aplicación, debes compilar la aplicación con la biblioteca de Android que se proporciona en la plataforma del 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?