APIs de Android 3.1

Nivel de API: 12

Para los desarrolladores, la plataforma Android 3.1 (HONEYCOMB_MR1) está 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. La plataforma descargable no incluye bibliotecas externas.

Para los desarrolladores, la plataforma Android 3.1 está 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.1, 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 en Android 3.1, incluidas las nuevas funciones y los cambios en la API de framework desde la versión anterior.

APIs de USB

Android 3.1 presenta nuevas y potentes APIs para integrar periféricos conectados con aplicaciones que se ejecuten en la plataforma. Las APIs se basan en una pila USB (bus universal en serie) y servicios que se integrada en la plataforma, incluida la compatibilidad con el host y el dispositivo USB interacciones. Con las APIs, los desarrolladores pueden crear aplicaciones que puedan descubrir, comunicarse y administrar diversos tipos de dispositivos conectados a través de USB.

La pila y las APIs distinguen dos tipos básicos de hardware USB, que se basan en si el dispositivo con Android actúa como host o el hardware externo. actúa como host:

  • Un dispositivo USB es una pieza de hardware conectado que depende del Dispositivo con Android que se usará como host. Por ejemplo, la mayoría de los dispositivos de entrada, mouse, y los joysticks son dispositivos USB, al igual que muchas cámaras, concentradores, etc.
  • Un accesorio USB es una pieza de hardware conectado que tiene un cable USB. controlador de host, suministra energía y está diseñado para comunicarse con a través de USB, una variedad de periféricos pueden conectarse como accesorios, desde controladores robóticos hasta equipos musicales, bicicletas estáticas, y más.

Para ambos tipos, dispositivos y accesorios USB, la interfaz las API de USB de la plataforma admiten la detección por emisión de intent cuando se conectan o independiente, así como interfaces estándar, extremos y modos de transferencia (control, masiva e interrupción).

Las APIs de USB están disponibles en el paquete android.hardware.usb. El la clase central es UsbManager, que proporciona métodos auxiliares para identificarse y comunicarse dispositivos y accesorios USB. Las aplicaciones pueden adquirir una instancia de UsbManager y, luego, consulta la lista de archivos adjuntos dispositivos o accesorios y, luego, comunicarte con ellos o administrarlos. UsbManager también declara las acciones de intent que el del sistema, para anunciar cuando hay un dispositivo o accesorio USB conectado o independiente.

Entre otras clases, se incluyen las siguientes:

  • UsbDevice, una clase que representa hardware conectado como un dispositivo USB (con el dispositivo con Android que actúa como host).
  • UsbAccessory, que representa el hardware externo conectado como host USB (con el dispositivo con Android que actúa como USB) dispositivo).
  • UsbInterface y UsbEndpoint, que proporcionan acceso a USB estándar interfaces y extremos de un dispositivo.
  • UsbDeviceConnection y UsbRequest, para enviar y recibir datos y controlarlos mensajes desde o hacia un dispositivo USB, de forma síncrona y asíncrona.
  • UsbConstants, que proporciona constantes para declarar tipos de extremos, clases de dispositivos, etc.

Ten en cuenta que, aunque la pila USB está integrada en la plataforma, la compatibilidad real para los modos de host USB y de accesorio abierto en dispositivos específicos está determinado por a sus fabricantes. En particular, el modo de host depende de los puertos el hardware del control de acceso en el dispositivo con Android.

Además, los desarrolladores pueden solicitar filtros en Google Play, de modo que sus aplicaciones no están disponibles para los usuarios cuyos dispositivos no proporcionan la la compatibilidad con USB correspondiente. Para solicitar filtros, agrega uno o ambos elementos a continuación al manifiesto de la aplicación, según corresponda:

  • Si la aplicación solo debería ser visible para dispositivos compatibles con USB modo de host (conexión de dispositivos USB), declara este elemento:

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • Si la aplicación solo debería ser visible para dispositivos compatibles con USB accesorios (conexión de hosts USB), declara este elemento:

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

Para obtener información completa sobre cómo desarrollar aplicaciones que interactúan con accesorios USB, consulta la documentación para desarrolladores.

Para ver ejemplos de aplicaciones que usan la API del host USB, consulta Prueba ADB y Misiles Selector

API de MTP/PTP

Android 3.1 expone una nueva API de MTP que permite a las aplicaciones interactuar directamente con cámaras conectadas y otros dispositivos PTP. La nueva API facilita que una para recibir notificaciones cuando los dispositivos se conectan y quitan, administrar archivos y almacenamiento en esos dispositivos, y transferir archivos y metadatos a y de ellas. La API de MTP implementa el subconjunto de PTP (protocolo de transferencia de imágenes). de la especificación de MTP (protocolo de transferencia multimedia).

La API de MTP está disponible en el paquete android.mtp y proporciona estas clases:

  • El MtpDevice encapsula un dispositivo MTP que es que está conectada a través del bus host USB. Una aplicación puede crear una instancia de un objeto de este tipo y luego usa sus métodos para obtener información sobre el dispositivo y los objetos almacenados en él, así como abrir la conexión y transferir datos. Algunos de los métodos incluyen los siguientes:
    • getObjectHandles() muestra una lista de controladores para todos los objetos del dispositivo que coincidan con un formato y elemento superior especificados. Para obtener información sobre un objeto, un aplicación puede pasar un controlador a getObjectInfo().
    • importFile() permite que una aplicación copie los datos de un objeto a un archivo en un entorno externo y almacenamiento de los datos. Esta llamada puede bloquearse durante un período arbitrario según la el tamaño de los datos y la velocidad de los dispositivos, por lo que se debe hacer conversación.
    • open() permite que una aplicación abra un dispositivo MTP/PTP conectado.
    • Devoluciones por getThumbnail() la miniatura del objeto como un array de bytes.
  • MtpStorageInfo conserva información sobre un almacenamiento en un dispositivo MTP, que corresponde al conjunto de datos StorageInfo descrito en 5.2.2 de la especificación de MTP. Los métodos de la clase permiten que una aplicación obtener la cadena de descripción de una unidad de almacenamiento, el espacio libre, la capacidad máxima de almacenamiento el ID de almacenamiento y el identificador de volumen.
  • MtpDeviceInfo conserva la información sobre un dispositivo MTP. correspondiente al conjunto de datos DeviceInfo descrito en la sección 5.1.1 de la MTP especificación. Los métodos de la clase permiten que las aplicaciones obtengan la información de un dispositivo fabricante, modelo, número de serie y versión.
  • MtpObjectInfo contiene información sobre un objeto almacenado en un dispositivo MTP, que corresponde al conjunto de datos ObjectInfo descrito en la sección 5.3.1 de la especificación de MTP. Los métodos de la clase permiten que las aplicaciones obtengan una tamaño del objeto, formato de datos, tipo de asociación, fecha de creación y miniatura información.
  • MtpConstants proporciona constantes para declarar el archivo MTP. los códigos de formato, el tipo de asociación y el estado de protección.

Compatibilidad con nuevos dispositivos de entrada y eventos de movimiento

Android 3.1 amplía el subsistema de entrada para admitir nuevos dispositivos de entrada y nuevos tipos de eventos de movimiento, en todas las vistas y ventanas. Los desarrolladores pueden aprovechar estas capacidades para permitir que los usuarios interactúen con sus aplicaciones usando mouse, bolas de seguimiento, joysticks, mandos para videojuegos y otros dispositivos, además de teclados y pantallas táctiles.

Para controlar la entrada del mouse, la rueda de desplazamiento y la bola de seguimiento, la plataforma admite dos nuevas acciones de eventos de movimiento:

  • ACTION_SCROLL, que describe el puntero ubicación en la que un movimiento de desplazamiento no táctil, como la rueda del mouse, tuvo lugar. En MotionEvent, el valor de los ejes AXIS_HSCROLL y AXIS_VSCROLL especifica el desplazamiento relativo. movimiento.
  • ACTION_HOVER_MOVE, informa el valor actual del mouse cuando no se presiona ningún botón, así como cualquier puntos desde el último evento de HOVER_MOVE. Coloca el cursor sobre Intro y Salir aún no se admiten las notificaciones.

Para admitir joysticks y controles de juegos, la clase InputDevice incluye estas nuevas fuentes de dispositivos de entrada:

Para describir eventos de movimiento de estas nuevas fuentes, así como de los de mouse y bolas de seguimiento, la plataforma ahora define códigos de eje en MotionEvent, de manera similar a como define códigos de teclas en KeyEvent. Nuevos códigos de eje para joysticks y los controles de juegos incluyen AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE y muchos más. Los ejes MotionEvent existentes se representan con AXIS_X, AXIS_Y. AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR y AXIS_ORIENTATION.

Además, MotionEvent define la cantidad de objetos códigos de eje que se usan cuando el framework no sabe cómo asignar una en un eje determinado. Ciertos dispositivos pueden usar los códigos de eje genéricos para pasar códigos datos de movimiento a las aplicaciones. Para obtener una lista completa de los ejes y sus interpretaciones, consulta la documentación de la clase MotionEvent.

La plataforma proporciona eventos de movimiento a las aplicaciones por lotes, así que puede contener una posición actual y varios movimientos históricos. Las aplicaciones deben usar getHistorySize() para obtener el número de muestras históricas y, luego, recuperar y procesar todas muestras en orden con getHistoricalAxisValue(). Después de eso, las aplicaciones deben procesar el de muestra con getAxisValue().

Algunos ejes se pueden recuperar con métodos de acceso especiales. Por ejemplo: en lugar de llamar a getAxisValue(), las aplicaciones pueden llamar a getX(). Entre los ejes que tienen descriptores de acceso integrados se incluyen AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR y AXIS_ORIENTATION.

Cada dispositivo de entrada tiene un ID único asignado por el sistema y también puede proporcionar múltiples fuentes. Cuando un dispositivo proporciona múltiples fuentes, se activa más de una. puedes proporcionar datos de eje usando el mismo eje. Por ejemplo, si llega un evento táctil de la fuente táctil usa el eje X para los datos de posición de la pantalla, mientras que un joystick que provenga de la fuente del joystick usará el eje X para la posición de la barra en su lugar. Por este motivo, es importante que las aplicaciones interpreten los ejes de salida según la fuente de donde se originan. Cuando se manipula un movimiento las aplicaciones deben usar métodos en InputDevice para determinar los ejes compatibles con un dispositivo o una fuente. Específicamente: las aplicaciones pueden usar getMotionRanges() para consultar todos los ejes de un dispositivo o todos los ejes de un determinado fuente del dispositivo. En ambos casos, la información de rango para ejes devuelta en el objeto InputDevice.MotionRange especifica la fuente del para cada valor de eje.

Por último, dado que los eventos de movimiento de los joysticks, los mandos para juegos, los mouse las bolas de seguimiento no son eventos táctiles, la plataforma agrega un nuevo método de devolución de llamada para y pásalas a un elemento View como “genéricos”. de movimiento. En concreto, informa los eventos de movimiento no táctiles a View a través de una llamada a onGenericMotionEvent(), en lugar de a onTouchEvent()

La plataforma envía eventos genéricos de movimiento de manera diferente, según el la clase de origen del evento. SOURCE_CLASS_POINTER eventos ve a View debajo del puntero, de manera similar a como sucede los eventos funcionan. Todos los demás se dirigen al elemento View enfocado actualmente. Por ejemplo, esto significa que un elemento View debe enfocarse para hacer lo siguiente: o recibir eventos de joystick. Si es necesario, las aplicaciones pueden controlar estos eventos en el nivel de actividad o diálogo implementando onGenericMotionEvent() allí.

Para ver una aplicación de ejemplo que usa el movimiento del joystick eventos, consulta GameControllerInput y GameView.

API de RTP

Android 3.1 expone una API a su protocolo de transporte en tiempo real (RTP) integrado. que las aplicaciones pueden usar para administrar datos interactivos o según demanda transmisión. En particular, las apps que brindan VoIP, presionar para hablar, conferencias y la transmisión de audio pueden usar la API para iniciar sesiones y transmitir o recibir flujos de datos en cualquier red disponible.

La API de RTP está disponible en el paquete android.net.rtp. Clases incluyen:

  • RtpStream, la clase base de transmisiones que envían y recibir paquetes de red con cargas útiles de medios a través de RTP.
  • AudioStream, una subclase de RtpStream que lleva cargas útiles de audio a través de RTP
  • AudioGroup, un concentrador de audio local para administrar y que combina la bocina del dispositivo, el micrófono y AudioStream.
  • AudioCodec, que contiene una colección de códecs que que defines para una AudioStream.

Para admitir videoconferencias y usos similares, una aplicación crea una instancia dos clases como extremos de la transmisión:

El uso más simple implica un único extremo remoto y un extremo local. Para usos más complejos, consulta las limitaciones descritas para AudioGroup

Para usar la API de RTP, las aplicaciones deben solicitar permiso al usuario Declarando <uses-permission android:name="android.permission.INTERNET"> en sus archivos de manifiesto. Para obtener el micrófono del dispositivo, también se requiere el permiso <uses-permission android:name="android.permission.RECORD_AUDIO">.

Widgets de apps de tamaño variable

A partir de Android 3.1, los desarrolladores pueden crear widgets en la pantalla principal. se puede cambiar de tamaño, en sentido horizontal, vertical o en ambos ejes. Los usuarios mantienen presionada para mostrar sus controladores de cambio de tamaño y, luego, arrastra el ángulo horizontal o vertical. controladores para cambiar el tamaño en la cuadrícula de diseño.

Los desarrolladores pueden hacer que se pueda cambiar el tamaño de cualquier widget de la pantalla principal definiendo un El atributo resizeMode en los metadatos AppWidgetProviderInfo del widget. Valores para el El atributo resizeMode incluye “horizontal”, “vertical” y “ninguno”. Para declarar un widget como horizontal y vertical, proporciona el valor "horizontal|vertical".

Por ejemplo:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

Para obtener más información sobre los widgets de la pantalla principal, consulta Widgets de la app. en la documentación de Google Cloud.

Framework de animación

  • Nueva clase ViewPropertyAnimator
    • Una nueva clase ViewPropertyAnimator proporciona un conveniente para los desarrolladores de animar propiedades seleccionadas en objetos View. La clase automatiza y optimiza la animación de las propiedades, y facilita administrar varias animaciones simultáneas en un objeto View

      Usar ViewPropertyAnimator es sencillo. Para animar propiedades de un View, llama a animate() para construir un objeto ViewPropertyAnimator para ese View. Usa el en ViewPropertyAnimator para especificar a qué propiedad y cómo hacerlo. Por ejemplo, para atenuar el View a transparente, haz lo siguiente: llama a alpha(0);. El objeto ViewPropertyAnimator se encarga de los detalles de configuración de la clase Animator subyacente, iniciarla y, luego, renderizar la clase animación.

  • Color de fondo de la animación
    • Nuevo getBackgroundColor() y Los métodos setBackgroundColor(int) permiten obtienes o estableces el color de fondo detrás de las animaciones para las animaciones de ventanas solamente. Actualmente, el fondo debe ser negro, con cualquier nivel alfa deseado.
  • Obteniendo fracción animada de ViewAnimator
    • Un nuevo getAnimatedFraction() método te permite obtener la fracción de animación actual: el tiempo transcurrido/interpolado fracción utilizada en la actualización de fotogramas más reciente, desde un ValueAnimator.

Framework de IU

  • Renderización forzada de una capa
    • Un nuevo método buildLayer() permite que una aplicación forzar la creación de una capa de un elemento View y la renderización de la vista en ella de inmediato. Por ejemplo, una aplicación puede utilizar este método para renderizar una vista en su antes de iniciar una animación. Si la vista es compleja, renderizarla la capa antes de iniciar la animación, evitará la omisión de fotogramas.
  • Distancia de la cámara
    • Las aplicaciones pueden usar un nuevo método setCameraDistance(float) para configurar la distancia cámara a un objeto View. Esto les brinda a las aplicaciones un control mejorado sobre las transformaciones 3D de la vista, como rotaciones.
  • Cómo obtener una vista de calendario desde un selector de fecha
  • Obtención de devoluciones de llamada cuando se desconectan las vistas
  • Receptor de ruta de navegación de fragmentos, nueva firma onInflate()
  • Mostrar el resultado de la búsqueda en una pestaña nueva
    • Una clave de datos EXTRA_NEW_SEARCH para intents ACTION_WEB_SEARCH te permite abrir una búsqueda en un en una pestaña nueva del navegador, en lugar de en una existente.
  • Cursor de texto de elementos de diseño
    • Ahora puedes especificar un elemento de diseño para usar como cursor de texto con el nuevo el atributo de recurso textCursorDrawable.
  • Configuración del elemento secundario mostrado en vistas remotas
  • Teclas genéricas para controles de juegos y otros dispositivos de entrada
    • KeyEvent agrega un rango de códigos de clave genéricos a para ajustar los botones del control de mando. La clase también agrega isGamepadButton(int) y varias más de ayuda para trabajar con códigos de teclas.

Gráficos

  • Ayudas para administrar mapas de bits
    • setHasAlpha(boolean) permite que una app indique lo siguiente: se sabe que todos los píxeles de un mapa de bits son opacos (falso) o que algunos de los los píxeles pueden contener valores alfa no opacos (verdadero). Ten en cuenta que, para algunos parámetros de configuración (como como RGB_565), esta llamada se ignora, ya que no es compatible con alfa por píxel. de salida. Esto es una sugerencia de dibujo, como en algunos casos, un mapa de bits que se conoce para que sea opaco, puede ser más rápido que uno que no sea opaco valores alfa por píxel.
    • getByteCount() obtiene el tamaño de un mapa de bits en bytes.
    • getGenerationId() permite que una aplicación encuentre si un mapa de bits se modificó, por ejemplo, para el almacenamiento en caché.
    • sameAs(android.graphics.Bitmap) determina si un mapa de bits dado difiere del mapa de bits actual en dimensión, configuración ni datos de píxeles.
  • Cómo configurar la rotación y la ubicación de la cámara
    • Camera agrega dos métodos nuevos, rotate() y setLocation(), para el control de la la ubicación de la cámara para las transformaciones en 3D.

Red

  • Bloqueo de Wi-Fi de alto rendimiento
    • Una nueva cerradura Wi-Fi de alto rendimiento permite que las aplicaciones mantengan conexiones Wi-Fi de alto rendimiento, incluso con la pantalla apagada. Las aplicaciones que transmiten música, video o voz durante largos períodos pueden adquirir la bloqueo de Wi-Fi de alto rendimiento para garantizar el rendimiento de la transmisión, incluso cuando la pantalla está desactivada. Debido a que usa más energía, las aplicaciones deben adquirir de alto rendimiento cuando se necesita una conexión Wi-Fi activa conexión.

      Para crear un bloqueo de alto rendimiento, pasa WIFI_MODE_FULL_HIGH_PERF como el modo bloqueado en un llamada a createWifiLock().

  • Más estadísticas de tráfico
    • Ahora las aplicaciones pueden acceder a estadísticas sobre más tipos de uso de red con métodos nuevos en TrafficStats. Las aplicaciones pueden usar el para obtener estadísticas de UDP, recuento de paquetes, bytes de carga útil de transmisión/recepción de TCP y para un UID determinado.
  • Nombre de usuario de autenticación SIP
    • Las aplicaciones ahora pueden obtener y configurar el nombre de usuario de autenticación SIP para un perfil mediante los nuevos métodos getAuthUserName() y setAuthUserName().

Administrador de descargas

  • Manejo de las descargas completadas
    • Ahora las aplicaciones pueden iniciar descargas que notifican a los usuarios solo en del proyecto. Para iniciar este tipo de descarga, las aplicaciones pasan VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION en el método setNotificationVisibility() de el objeto Request.
    • Un nuevo método, addCompletedDownload(), permite que una aplicación agregue un archivo al de descargas de la base de datos, de modo que pueda ser administrada por la aplicación de Descargas.
  • Mostrar las descargas ordenadas por tamaño

Marco de IME

  • Cómo obtener la clave de valor adicional de un método de entrada

Contenido multimedia

  • Nuevos formatos de transmisión de audio
    • El framework de medios agrega compatibilidad integrada con contenido ADTS AAC sin procesar, para transmisión mejorada de audio, así como compatibilidad con audio FLAC, para obtener la más alta calidad contenido de audio comprimido (sin pérdidas). Consulta los Formatos de medios compatibles para obtener más información.

Controles de inicio en los dispositivos detenidos aplicaciones

A partir de Android 3.1, el administrador de paquetes del sistema realiza un seguimiento de que están en estado detenido y proporcionan una forma de controlar su lanzamiento a partir de procesos en segundo plano y otras aplicaciones.

Ten en cuenta que el estado de detención de una aplicación no es el mismo que el de una actividad el estado de detención. El sistema administra esos dos estados de detención por separado.

La plataforma define dos nuevas marcas de intent que permiten que un remitente especifique si se le debe permitir al intent activar componentes en objetos y mantener la integridad de su aplicación.

Cuando ninguna de estas marcas (o ambas) se define en un intent, el valor predeterminado es incluir filtros de aplicaciones detenidas en la lista de objetivos potenciales.

Ten en cuenta que el sistema agrega FLAG_EXCLUDE_STOPPED_PACKAGES a todas las transmisiones intents. Lo hace para evitar que las emisiones de los servicios en segundo plano iniciar, de forma involuntaria o innecesaria, componentes de aplicaciones detenidas Un servicio o una aplicación en segundo plano puede anular este comportamiento agregando Marca FLAG_INCLUDE_STOPPED_PACKAGES para transmitir que deben poder activar aplicaciones detenidas.

Las aplicaciones se encuentran detenidas cuando se instalan por primera vez, pero no que aún se lanzan y cuando el usuario los detiene manualmente (en Administrar Aplicaciones).

Notificación del primer lanzamiento y la actualización de la aplicación

La plataforma agrega notificaciones mejoradas del primer lanzamiento de la aplicación y a través de dos acciones de intent nuevas:

  • ACTION_PACKAGE_FIRST_LAUNCH: Se envió a el paquete del instalador de una aplicación cuando esta se inicia por primera vez (es decir, la primera vez que sale de un estado detenido). Los datos contiene el nombre del paquete.
  • ACTION_MY_PACKAGE_REPLACED: Notificaciones una aplicación que se actualizó y que se instaló una versión nueva una versión existente. Esto solo se envía a la aplicación que se reemplazó. Integra no contiene ningún dato adicional. Para recibirlo, declara un filtro de intents. para esta acción. Puedes usar el intent para activar código que te ayude a que la aplicación vuelva a funcionar correctamente después de una actualización.

    Este intent se envía directamente a la aplicación, pero solo si esta se actualizó mientras estaba en estado iniciado (no detenido).

Utilidades principales

  • Caché LRU
    • Una nueva clase LruCache permite que tus aplicaciones se beneficien del almacenamiento en caché eficiente. Las aplicaciones pueden usar la clase para reducir el tiempo dedicado calcular o descargar datos de la red, mientras se mantiene un espacio en memoria para los datos almacenados en caché.LruCache es una caché que contiene referencias fuertes a un número limitado de valores. Cada vez que se agrega un valor si accedes, se mueve al encabezado de una cola. Cuando se agrega un valor a una al final, se expulsa y puede ser apto para la recolección de elementos no utilizados.
  • Descriptor de archivos como int

WebKit

  • Cookies de esquema de archivos
    • CookieManager ahora admite cookies que usan el Esquema de URI file: Puedes usar setAcceptFileSchemeCookies() para lo siguiente: habilitar/inhabilitar la compatibilidad con cookies de esquema de archivos antes de construir una instancia de WebView o CookieManager. En una instancia CookieManager, puedes verificar si las cookies de esquema de archivos se habilita llamando a allowFileSchemeCookies().
  • Notificación de solicitud de acceso
    • Para admitir las funciones de inicio de sesión automático del navegador presentadas en Android 3.0, el equipo de nuevo método onReceivedLoginRequest() notifica al host aplicación de que se procesó una solicitud de acceso automático para el usuario.
  • Clases e interfaces que se quitaron
    • Varias clases e interfaces se quitaron de la API pública, después que antes estaban en estado obsoleto. Consulta la página Informe de diferencias para obtener más información.

Navegador

La aplicación del navegador agrega las siguientes funciones para admitir la Web aplicaciones:

  • Compatibilidad con la reproducción intercalada de videos incorporados en HTML5 <video>. La reproducción se acelera por hardware siempre que sea posible.
  • Compatibilidad con capas para elementos de posición fija para todos los sitios (dispositivos móviles y una computadora de escritorio).

Nuevas constantes de funciones

La plataforma agrega nuevas constantes de funciones de hardware que los desarrolladores pueden declarar. en los manifiestos de sus aplicaciones, para informar a entidades externas como Google Juego de los requisitos de la aplicación para las nuevas capacidades de hardware compatibles en esta versión de la plataforma. Los desarrolladores declaran estas y otras funciones constantes en los elementos del manifiesto <uses-feature>.

Google Play filtra las aplicaciones según las funciones declaradas en los elementos del manifiesto <uses-feature>. Para obtener más información la declaración de funciones en un manifiesto de aplicación, lee Google Play Filtros.

Informe de diferencias de las APIs

Puedes obtener una vista detallada de todos los cambios de la API en Android 3.1 (API Nivel 12), consulta la sección Informe de diferencias.

Nivel de API

La plataforma Android 3.1 ofrece una versión actualizada de la API del framework. La API de Android 3.1 se le asigna un identificador de número entero, 12: 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.1, debes compilar la aplicación en la biblioteca de Android que se proporciona en la plataforma del SDK de Android 3.1. Según tus necesidades, podría también debes agregar un android:minSdkVersion="12" al elemento <uses-sdk> en la carpeta de la aplicación .

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