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
yUsbEndpoint
, que proporcionan acceso a USB estándar interfaces y extremos de un dispositivo.UsbDeviceConnection
yUsbRequest
, 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 agetObjectInfo()
.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 ejesAXIS_HSCROLL
yAXIS_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 deHOVER_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:
SOURCE_CLASS_JOYSTICK
: Es la fuente. tiene ejes joystick.SOURCE_CLASS_BUTTON
: Es la fuente. dispositivo tiene botones o teclas.SOURCE_GAMEPAD
: Es el dispositivo de origen. tiene botones de control de juegos, comoKEYCODE_BUTTON_A
oKEYCODE_BUTTON_B
. ImplicaSOURCE_CLASS_BUTTON
SOURCE_JOYSTICK
: Es el dispositivo de origen. tiene ejes de joystick. Implica SOURCE_CLASS_JOYSTICK.
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 deRtpStream
que lleva cargas útiles de audio a través de RTPAudioGroup
, un concentrador de audio local para administrar y que combina la bocina del dispositivo, el micrófono yAudioStream
.AudioCodec
, que contiene una colección de códecs que que defines para unaAudioStream
.
Para admitir videoconferencias y usos similares, una aplicación crea una instancia dos clases como extremos de la transmisión:
AudioStream
especifica un extremo remoto y consta de la asignación de red y unAudioCodec
configurado.AudioGroup
representa el extremo local de un o másAudioStream
. Las mezclas deAudioGroup
todos losAudioStream
y, opcionalmente, interactúa con el dispositivo una bocina y un micrófono al mismo tiempo.
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 objetosView
. La clase automatiza y optimiza la animación de las propiedades, y facilita administrar varias animaciones simultáneas en un objetoView
Usar
ViewPropertyAnimator
es sencillo. Para animar propiedades de unView
, llama aanimate()
para construir un objetoViewPropertyAnimator
para eseView
. Usa el enViewPropertyAnimator
para especificar a qué propiedad y cómo hacerlo. Por ejemplo, para atenuar elView
a transparente, haz lo siguiente: llama aalpha(0);
. El objetoViewPropertyAnimator
se encarga de los detalles de configuración de la claseAnimator
subyacente, iniciarla y, luego, renderizar la clase animación.
- Una nueva clase
- Color de fondo de la animación
- Nuevo
getBackgroundColor()
y Los métodossetBackgroundColor(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.
- Nuevo
- 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 unValueAnimator
.
- Un nuevo
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.
- Un nuevo método
- 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.
- Las aplicaciones pueden usar un nuevo método
- Cómo obtener una vista de calendario desde un selector de fecha
- Un nuevo método
getCalendarView()
te permite obtener unCalendarView
de unDatePicker
instancia.
- Un nuevo método
- Obtención de devoluciones de llamada cuando se desconectan las vistas
- Un nuevo
View.OnAttachStateChangeListener
te permite recibir devoluciones de llamada cuando se adjunta una vista o se desconecta de su ventana. UsaaddOnAttachStateChangeListener()
para agregar un objeto de escucha yaddOnAttachStateChangeListener()
para quitarlo.
- Un nuevo
- Receptor de ruta de navegación de fragmentos, nueva firma onInflate()
- Un método nuevo,
setOnBreadCrumbClickListener()
, proporciona contenido atractivo Las aplicaciones interceptan los clics en la ruta de navegación de fragmentos y toman las medidas necesarias antes de ir a la entrada o al fragmento de la pila de actividades en el que se hizo clic. - En la clase
Fragment
,onInflate(attrs, savedInstanceState)
dejó de estar disponible. En su lugar, usaonInflate(activity, attrs, savedInstanceState)
.
- Un método nuevo,
- Mostrar el resultado de la búsqueda en una pestaña nueva
- Una clave de datos
EXTRA_NEW_SEARCH
para intentsACTION_WEB_SEARCH
te permite abrir una búsqueda en un en una pestaña nueva del navegador, en lugar de en una existente.
- Una clave de datos
- 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
.
- Ahora puedes especificar un elemento de diseño para usar como cursor de texto con el nuevo
el atributo de recurso
- Configuración del elemento secundario mostrado en vistas remotas
- Un nuevo método de conveniencia,
setDisplayedChild(viewId, childIndex)
, está disponible en las subclasesRemoteViews
, para lo cual te permiten configurar el elemento secundario que se muestra enViewAnimator
y Las subclases deAdapterViewAnimator
, comoAdapterViewFlipper
,StackView
,ViewFlipper
yViewSwitcher
.
- Un nuevo método de conveniencia,
- 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 agregaisGamepadButton(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()
ysetLocation()
, 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 acreateWifiLock()
.
- 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.
- 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.
- Ahora las aplicaciones pueden acceder a estadísticas sobre más tipos de uso de red
con métodos nuevos en
- 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()
ysetAuthUserName()
.
- Las aplicaciones ahora pueden obtener y configurar el nombre de usuario de autenticación SIP para un perfil
mediante
los nuevos métodos
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étodosetNotificationVisibility()
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.
- Ahora las aplicaciones pueden iniciar descargas que notifican a los usuarios solo en
del proyecto. Para iniciar este tipo de descarga, las aplicaciones pasan
- Mostrar las descargas ordenadas por tamaño
- Las aplicaciones pueden iniciar la aplicación Descargas en el modo de ordenación por tamaño mediante
Agregando el nuevo
INTENT_EXTRAS_SORT_BY_SIZE
adicional a un intentACTION_VIEW_DOWNLOADS
.
- Las aplicaciones pueden iniciar la aplicación Descargas en el modo de ordenación por tamaño mediante
Agregando el nuevo
Marco de IME
- Cómo obtener la clave de valor adicional de un método de entrada
InputMethodSubtype
agrega el elemento métodocontainsExtraValueKey()
para verificar si se almacena una cadena ExtraValue para el subtipo y el métodogetExtraValueOf()
para extraer un valor de clave específico del mapa de hash ExtraValue.
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.
FLAG_INCLUDE_STOPPED_PACKAGES
: Incluir filtros de intents de aplicaciones detenidas en la lista de posibles objetivos para resolver.FLAG_EXCLUDE_STOPPED_PACKAGES
: Excluye los filtros de intents de las aplicaciones detenidas de la lista de posibles objetivos.
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.
- Una nueva clase
- Descriptor de archivos como
int
- Ahora puedes obtener el int del descriptor de archivos nativo para un
ParcelFileDescriptor
mediante cualquiera de los nuevos métodosgetFd()
odetachFd()
.
- Ahora puedes obtener el int del descriptor de archivos nativo para un
WebKit
- Cookies de esquema de archivos
CookieManager
ahora admite cookies que usan el Esquema de URIfile:
Puedes usarsetAcceptFileSchemeCookies()
para lo siguiente: habilitar/inhabilitar la compatibilidad con cookies de esquema de archivos antes de construir una instancia deWebView
oCookieManager
. En una instanciaCookieManager
, puedes verificar si las cookies de esquema de archivos se habilita llamando aallowFileSchemeCookies()
.
- 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.
- Para admitir las funciones de inicio de sesión automático del navegador presentadas en Android 3.0, el equipo de
nuevo
método
- 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>
.
android.hardware.usb.accessory
: La aplicación usa el puerto USB API para comunicarse con dispositivos de hardware externos conectados mediante USB y funcionar como hosts.android.hardware.usb.host
: La aplicación usa la API de USB para comunicarse con dispositivos de hardware externos conectados a través de USB y que funcionen como dispositivos.
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?