APIs de Android 2.3

Nivel de API: 9

Para los desarrolladores, la plataforma de Android 2.3 (GINGERBREAD) está disponible como un componente descargable del SDK de Android. La plataforma descargable incluye una biblioteca de Android, una imagen del sistema, un conjunto de máscaras de emulador y mucho más. Para comenzar a desarrollar o probar con Android 2.3, 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 la versión 2.3, incluidas las funciones nuevas y los cambios en la API de framework desde la versión anterior.

VoIP basado en SIP

La plataforma ahora incluye una pila de protocolos SIP y una API de framework que permiten a los desarrolladores crear aplicaciones de telefonía por Internet. Con la API, las aplicaciones pueden ofrecer funciones de llamadas de voz sin tener que administrar sesiones, comunicación a nivel de transporte ni audio; la API y los servicios de SIP de la plataforma se encargan de estas funciones con transparencia.

La API de SIP está disponible en el paquete android.net.sip. La clase clave es SipManager, que las aplicaciones usan para configurar y administrar perfiles SIP y, luego, iniciar llamadas de audio y recibirlas. Una vez que se establece una llamada de audio, las aplicaciones pueden silenciar llamadas, activar el modo de bocina, enviar tonos DTMF y mucho más. Las aplicaciones también pueden usar SipManager para crear conexiones SIP genéricas.

La pila y los servicios SIP subyacentes de la plataforma están disponibles en dispositivos a discreción del fabricante y el operador asociado. Por este motivo, las aplicaciones deben usar el método isApiSupported() para verificar si la compatibilidad con SIP está disponible antes de exponer la funcionalidad de llamada a los usuarios.

Para usar la API de SIP, las aplicaciones deben solicitar permiso al usuario declarando <uses-permission android:name="android.permission.INTERNET"> y <uses-permission android:name="android.permission.USE_SIP"> en sus archivos de manifiesto.

Además, los desarrolladores pueden solicitar filtros en Google Play para que sus aplicaciones no sean detectables para los usuarios cuyos dispositivos no incluyan los servicios y la pila SIP de la plataforma. Para solicitar el filtrado, agrega <uses-feature android:name="android.software.sip" android:required="true"> y <uses-feature android:name="android.software.sip.voip"> al manifiesto de la aplicación.

Para obtener más información, lee la guía para desarrolladores de SIP.

Comunicación de campo cercano (NFC)

Android 2.3 incluye una pila de NFC y una API de framework que permite a los desarrolladores leer etiquetas NDEF que se descubren cuando un usuario toca un dispositivo compatible con NFC para etiquetar elementos incorporados en calcomanías, pósteres inteligentes e incluso otros dispositivos.

La plataforma proporciona los servicios subyacentes de NFC que funcionan con el hardware del dispositivo para descubrir etiquetas cuando entran en el rango. Cuando se descubre una etiqueta, la plataforma notifica a las aplicaciones mediante la transmisión de un intent y anexa los mensajes NDEF de la etiqueta al intent como extras. Las aplicaciones pueden crear filtros de intents para reconocer y controlar etiquetas y mensajes orientados. Por ejemplo, después de recibir una etiqueta por intent, las aplicaciones extraen los mensajes NDEF, los almacenan, alertan al usuario o los manejan de otra manera.

La API de NFC está disponible en el paquete android.nfc. Las clases clave son las siguientes:

  • NfcAdapter, que representa el hardware NFC en el dispositivo.
  • NdefMessage, que representa un mensaje de datos NDEF, el formato estándar en el que los "registros" que transportan datos se transmiten entre dispositivos y etiquetas. Las aplicaciones pueden recibir estos mensajes de intents ACTION_TAG_DISCOVERED.
  • NdefRecord, que se entrega en un NdefMessage, que describe el tipo de datos que se comparten y lleva los datos en sí.

La comunicación NFC se basa en la tecnología inalámbrica del hardware del dispositivo, por lo que los fabricantes determinan la compatibilidad de las funciones de NFC de la plataforma en dispositivos específicos. Para determinar la compatibilidad con NFC en el dispositivo actual, las aplicaciones pueden llamar a isEnabled() para consultar el NfcAdapter. Sin embargo, la API de NFC siempre está presente, independientemente de la compatibilidad de hardware subyacente.

Para usar la API de NFC, las aplicaciones deben solicitar permiso al usuario declarando <uses-permission android:name="android.permission.NFC"> en sus archivos de manifiesto.

Además, los desarrolladores pueden solicitar filtros en Google Play para que sus aplicaciones no sean detectables para los usuarios cuyos dispositivos no admitan NFC. Para solicitar el filtrado, agrega <uses-feature android:name="android.hardware.nfc" android:required="true"> al manifiesto de la aplicación.

Para ver una aplicación de ejemplo que usa la API de NFC, consulta NFCDemo.

Giroscopio y otros sensores

Android 2.3 agrega compatibilidad con la plataforma y la API para varios tipos nuevos de lectura de sensores: giroscopio, vector de rotación, aceleración lineal, gravedad y barómetro. Los desarrolladores pueden usar las nuevas lecturas del sensor para crear aplicaciones que respondan de manera rápida y fluida a cambios precisos en la posición y el movimiento del dispositivo. La API de Sensor informa sobre el giroscopio y otros cambios del sensor a las aplicaciones interesadas, ya sea que se ejecuten en el framework de la aplicación o en código nativo.

Ten en cuenta que el conjunto específico de sensores de hardware disponibles en un dispositivo determinado varía a discreción del fabricante.

Los desarrolladores pueden solicitar filtros en Google Play para que sus aplicaciones no sean detectables para los usuarios cuyos dispositivos no ofrezcan un sensor de giroscopio. Para ello, agrega <uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"> al manifiesto de la aplicación.

Para obtener más información sobre la API, consulta Sensor.

Compatibilidad con varias cámaras

Las aplicaciones ahora pueden usar cualquier cámara que esté disponible en un dispositivo, para captura de fotos o video. Camera permite que las aplicaciones consulten la cantidad de cámaras disponibles y las características únicas de cada una.

  • La nueva clase Camera.CameraInfo almacena las características de posición de una cámara (orientación, frontal o posterior).
  • Los nuevos métodos getNumberOfCameras() y getCameraInfo() en la clase Camera permiten que las aplicaciones consulten las cámaras disponibles y abran la cámara que necesitan.
  • El nuevo método get() permite que las aplicaciones recuperen un CamcorderProfile para una cámara específica.
  • El nuevo getJpegEncodingQualityParameter() permite que las aplicaciones obtengan el nivel de calidad de captura de imagen estática para una cámara específica.

Para ver el código de muestra para acceder a una cámara frontal, consulta CameraPreview.java en la aplicación de ejemplo ApiDemos.

La API de Camera también agrega lo siguiente:

Efectos de audio mezclables

El framework multimedia de la plataforma agrega compatibilidad con nuevos efectos de audio globales por pista o por pista, como potenciador de bajos, virtualización de auriculares, ecualización y reverberación.

Para ver el código de muestra de efectos de audio, consulta AudioFxDemo.java en la aplicación de ejemplo ApiDemos.

El framework de medios también agrega lo siguiente:

  • Nueva compatibilidad con la etiqueta de altitud en los metadatos EXIF para archivos JPEG. Se agregó el nuevo método getAltitude() para recuperar el valor de la etiqueta de altitud EXIF.
  • El nuevo método setOrientationHint() permite que una aplicación le indique a MediaRecorder la orientación durante la captura de video.

Administrador de descargas

La plataforma incluye un nuevo servicio del sistema DownloadManager que controla descargas HTTP de larga duración. Las aplicaciones pueden solicitar que se descargue un URI en un archivo de destino en particular. DownloadManager realizará la descarga en segundo plano, se encargará de las interacciones HTTP y volverá a intentar las descargas después de fallas o entre cambios de conectividad y reinicios del sistema.

  • Las aplicaciones pueden obtener una instancia de la clase DownloadManager llamando a getSystemService(String) y pasando DOWNLOAD_SERVICE. Las aplicaciones que solicitan descargas a través de esta API deben registrar un receptor de emisión para ACTION_NOTIFICATION_CLICKED a fin de que controle correctamente cuando el usuario haga clic en una descarga en ejecución desde una notificación o desde la IU de descargas.
  • La clase DownloadManager.Request permite que una aplicación proporcione toda la información necesaria para solicitar una descarga nueva, como el URI de la solicitud y el destino de la descarga. Un URI de solicitud es el único parámetro obligatorio. Ten en cuenta que el destino de descarga predeterminado es un volumen compartido en el que el sistema puede borrar tu archivo si necesita recuperar espacio para usarlo. Para el almacenamiento continuo de una descarga, especifica un destino de descarga en el almacenamiento externo (consulta setDestinationUri(Uri)).
  • La clase DownloadManager.Query proporciona métodos que permiten que una aplicación consulte y filtre las descargas activas.

Modo estricto

Para ayudar a los desarrolladores a supervisar y mejorar el rendimiento de sus aplicaciones, la plataforma ofrece una nueva instalación del sistema llamada StrictMode. Cuando se implementa en una aplicación, StrictMode detecta y notifica al desarrollador sobre la actividad accidental en el disco o la red que podría degradar el rendimiento de la aplicación, como la actividad que tiene lugar en el subproceso principal de la aplicación (donde se reciben operaciones de la IU y también se realizan animaciones). Los desarrolladores pueden evaluar los problemas de uso de red y disco generados en StrictMode y corregirlos si es necesario, lo que mantiene el subproceso principal más responsivo y evita que se muestren diálogos de ANR a los usuarios.

  • StrictMode es la clase principal y es el punto de integración principal con el sistema y la VM. Esta clase proporciona métodos prácticos para administrar las políticas de subprocesos y VM que se aplican a la instancia.
  • StrictMode.ThreadPolicy y StrictMode.VmPolicy contienen las políticas que defines y aplicas al subproceso y a las instancias de VM.

Si quieres obtener más información para usar StrictMode y optimizar tu aplicación, consulta la documentación de la clase y el código de muestra en android.os.StrictMode.

Framework de IU

  • Compatibilidad con el sobredesplazamiento
    • Nueva compatibilidad con el sobredesplazamiento en Views y Widgets. En Views, las aplicaciones pueden habilitar o inhabilitar el sobredesplazamiento para una vista determinada, establecer el modo de desplazamiento, controlar la distancia de desplazamiento y controlar los resultados del sobredesplazamiento.
    • En los widgets, las aplicaciones pueden controlar las características de sobredesplazamiento, como la animación, el springback y la distancia de sobredesplazamiento. Para obtener más información, consulta android.view.View y android.widget.OverScroller.
    • ViewConfiguration también proporciona los métodos getScaledOverflingDistance() y getScaledOverscrollDistance().
    • Nuevos atributos overScrollMode, overScrollFooter y overScrollHeader para los elementos <ListView> para controlar el comportamiento del sobredesplazamiento.
  • Compatibilidad con el filtrado táctil
    • Se agregó compatibilidad con filtrado de toques, que permite a una aplicación mejorar la seguridad de los objetos View que proporcionan acceso a funciones sensibles. Por ejemplo, el filtrado de toques es adecuado para garantizar la seguridad de las acciones del usuario, como otorgar una solicitud de permiso, realizar una compra o hacer clic en un anuncio. Para obtener más detalles, consulta Ver la documentación de la clase.
    • Nuevo atributo filterTouchesWhenObscured para elementos de vista, que declara si se deben filtrar los toques cuando otra ventana visible oculta la ventana de la vista. Cuando se establece en "true", la vista no recibirá toques cada vez que aparezca un aviso, un diálogo o alguna otra ventana sobre la ventana de la vista. Consulta Ver la documentación de seguridad para obtener más detalles.

    Para ver el código de muestra para el filtrado táctil, consulta SecureView.java en la aplicación de ejemplo ApiDemos.

  • Administración de eventos mejorada
    • Nueva clase base para eventos de entrada, InputEvent. La clase proporciona métodos que permiten a las aplicaciones determinar el significado del evento, por ejemplo, mediante una consulta del InputDevice desde el que se originó el evento. KeyEvent y MotionEvent son subclases de InputEvent.
    • Nueva clase base para dispositivos de entrada, InputDevice. La clase almacena información sobre las capacidades de un dispositivo de entrada en particular y proporciona métodos que permiten a las aplicaciones determinar cómo interpretar eventos de un dispositivo de entrada.
  • Eventos de movimiento mejorados
    • La API de MotionEvent se extiende para incluir información del "ID de puntero", lo que permite a las aplicaciones realizar un seguimiento de los dedos individuales a medida que se mueven hacia arriba y hacia abajo. Esta clase agrega una variedad de métodos que permiten que una aplicación funcione de manera eficiente con eventos de movimiento.
    • El sistema de entrada ahora tiene lógica para generar eventos de movimiento con la nueva información del ID de puntero, sintetizando identificadores a medida que los punteros nuevos estén inactivos. El sistema realiza un seguimiento de varios IDs de puntero por separado durante un evento de movimiento y garantiza la continuidad adecuada de los punteros mediante la evaluación de la distancia entre el último y el siguiente conjunto de punteros.
  • Controles de selección de texto
    • Un nuevo método setComposingRegion permite que una aplicación marque una región de texto como texto redactado y mantenga el estilo actual. Un método getSelectedText devuelve el texto seleccionado a la aplicación. Los métodos están disponibles en BaseInputConnection, InputConnection y InputConnectionWrapper.
    • Nuevos atributos textSelectHandle, textSelectHandleLeft, textSelectHandleRight y textSelectHandleWindowStyle para <TextView>, para hacer referencia a elementos de diseño que se usarán para mostrar las anclas de selección de texto y el estilo de la ventana que los contiene
  • Controles de actividad
  • Estilos de íconos y texto de notificaciones
  • Pantallas extragrandes

    La plataforma ahora admite tamaños de pantalla extragrandes, como los que se pueden encontrar en las tablets. Los desarrolladores pueden indicar que sus aplicaciones están diseñadas para admitir tamaños de pantalla extragrandes agregando un elemento <supports screens ... android:xlargeScreens="true"> a sus archivos de manifiesto. Las aplicaciones pueden usar un nuevo calificador de recursos, xlarge, para etiquetar recursos específicos de pantallas extragrandes. Para obtener información sobre cómo admitir tamaños de pantalla extragrandes y de otro tipo, consulta Cómo admitir varias pantallas.

    Gráficos

    Proveedores de contenido

    • Nueva clase de proveedor AlarmClock para establecer una alarma o controlar una alarma El proveedor contiene una acción de intent ACTION_SET_ALARM y servicios adicionales que se pueden usar para iniciar una actividad a fin de configurar una alarma nueva en una aplicación de alarma. Las aplicaciones que desean recibir el intent SET_ALARM deben crear una actividad que requiera el permiso SET_ALARM. Las aplicaciones que deseen crear una alarma nueva deben usar Context.startActivity() para que el usuario tenga la opción de elegir qué aplicación de alarma usar.
    • MediaStore admite una nueva acción de intent, PLAY_FROM_SEARCH, que permite a una aplicación buscar contenido multimedia y reproducir contenido automáticamente desde el resultado cuando es posible. Por ejemplo, una aplicación podría activar este intent como resultado de un comando de reconocimiento de voz para escuchar música.
    • MediaStore también agrega una nueva marca MEDIA_IGNORE_FILENAME que le indica al escáner multimedia que ignore el contenido multimedia del directorio que lo contiene y sus subdirectorios. Los desarrolladores pueden usar esta opción para evitar que aparezcan gráficos en la Galería y, del mismo modo, para evitar que aparezcan sonidos y música de la aplicación en la app de Music.
    • El proveedor de Settings agrega las nuevas acciones de la actividad APPLICATION_DETAILS_SETTINGS y MANAGE_ALL_APPLICATIONS_SETTINGS, que permiten a una aplicación mostrar la pantalla de detalles de una aplicación específica o la pantalla Administrar aplicaciones.
    • El proveedor ContactsContract agrega el tipo de datos ContactsContract.CommonDataKinds.SipAddress para almacenar la dirección SIP (telefonía por Internet) de un contacto.

    Ubicación

    • LocationManager ahora realiza un seguimiento de las solicitudes de aplicaciones que generan bloqueos de activación o de Wi-Fi según WorkSource, una clase administrada por el sistema que identifica la aplicación.

      LocationManager realiza un seguimiento de todos los clientes que solicitan actualizaciones periódicas y les informa a sus proveedores sobre ellas como un parámetro WorkSource cuando establecen sus horas mínimas de actualización. El proveedor de ubicación de red usa WorkSource para rastrear los bloqueos de activación y Wi-Fi que inicia una aplicación, y lo agrega al uso de batería de la aplicación que se informa en Administrar aplicaciones.

    • LocationManager agrega varios métodos nuevos que permiten que una actividad se registre para recibir actualizaciones de ubicación periódicas o únicas según criterios específicos (consulta a continuación).
    • Una nueva clase Criteria permite que una aplicación especifique un conjunto de criterios para seleccionar un proveedor de ubicación. Por ejemplo, los proveedores se pueden ordenar de acuerdo con la precisión, el uso de energía, la capacidad para informar la altitud, la velocidad, el rumbo y el costo monetario.

    Almacenamiento

    • En Android 2.3, se agrega un StorageManager nuevo que admite archivos OBB (Opaque Binary Blob). Si bien la compatibilidad de plataforma con OBB está disponible en Android 2.3, las herramientas de desarrollo para crear y administrar archivos OBB no estarán disponibles hasta principios de 2011.
    • La plataforma Android 2.3 agrega compatibilidad oficial para dispositivos que no incluyen tarjetas SD (aunque proporciona una partición de tarjeta SD virtual cuando no hay una tarjeta SD física disponible). Un método de conveniencia, isExternalStorageRemovable(), permite que las aplicaciones determinen si hay una tarjeta SD física.

    Administrador de paquetes

    Telefonía

    • TelephonyManager agrega la constante NETWORK_TYPE_EVDO_B para especificar el tipo de red CDMA EVDO Rev B.
    • El nuevo método getPsc() muestra el código de codificación principal de la celda de entrega en una red de UMTS.

    Acceso nativo al ciclo de vida de la actividad y ventanas

    Android 2.3 expone un amplio conjunto de APIs para las aplicaciones que usan código nativo. Entre las clases de frameworks de interés para dichas aplicaciones, se incluyen las siguientes:

    • NativeActivity es un nuevo tipo de clase de actividad, cuyas devoluciones de llamada de ciclo de vida se implementan directamente en código nativo. Un NativeActivity y su código nativo subyacente se ejecutan en el sistema al igual que otras actividades. Específicamente, se ejecutan en el proceso del sistema de la aplicación para Android y en el subproceso de IU principal de la aplicación, y reciben las mismas devoluciones de llamada de ciclo de vida que otras actividades.
    • La nueva clase InputQueue y la interfaz de devolución de llamada permiten que el código nativo administre la cola de eventos.
    • La nueva interfaz SurfaceHolder.Callback2 permite que el código nativo administre un SurfaceHolder.
    • Los nuevos métodos takeInputQueue y takeSurface() en Window permiten que el código nativo administre eventos y plataformas.

    Para obtener información completa sobre cómo trabajar con código nativo o para descargar el NDK, consulta la página del NDK de Android.

    Tiempo de ejecución de Dalvik

    Nuevos elementos y atributos del manifiesto

    • Nuevo atributo xlargeScreens para el elemento <supports-screens> para indicar si la aplicación admite factores de forma de pantalla extragrandes. Para obtener más información, consulta Compatibilidad con varias pantallas.
    • Nuevos valores para el atributo android:screenOrientation del elemento <activity>:
      • "reverseLandscape": La actividad quiere tener la pantalla en orientación horizontal, girada en la dirección opuesta al modo horizontal convencional.
      • "reversePortrait": La actividad quiere tener la pantalla en orientación vertical, girada en la dirección opuesta al modo vertical convencional.
      • "sensorLandscape": La actividad quiere tener la pantalla en orientación horizontal, pero puede usar el sensor para cambiar la dirección a la que apunta.
      • "sensorPortrait": La actividad desea tener la pantalla en orientación vertical, pero puede usar el sensor para cambiar la dirección a la que apunta la pantalla.
      • "fullSensor": La orientación se determina mediante un sensor de orientación físico: la pantalla rotará en función de cómo el usuario mueva el dispositivo. Esto permite cualquiera de las 4 rotaciones posibles, independientemente de lo que haga normalmente el dispositivo (por ejemplo, algunos dispositivos normalmente no usan la rotación de 180 grados).

    Permisos nuevos

    • com.android.permission.SET_ALARM: Permite que una aplicación transmita un intent para establecer una alarma para el usuario. Una actividad que controla la acción de intent SET_ALARM debería requerir este permiso.
    • android.permission.USE_SIP: Permite que una aplicación use SIP API para realizar o recibir llamadas por Internet.
    • android.permission.NFC: Permite que una aplicación use NFC API para leer etiquetas NFC.

    Constantes de atributos nuevas

    La plataforma agrega varias funciones nuevas de hardware que los desarrolladores pueden declarar en los manifiestos de sus aplicaciones como obligatorias. Esto permite a los desarrolladores controlar cómo se filtra su aplicación cuando se publica en Google Play.

    Si deseas obtener información completa para declarar funciones y usarlas para filtrar, consulta la documentación de <uses-feature>.

    Informe de diferencias de las APIs

    Para obtener una vista detallada de todos los cambios de la API en Android 2.3 (nivel de API 9), consulta el Informe de diferencias de las APIs.

    Nivel de API

    La plataforma de Android 2.3 entrega una versión actualizada de la API de framework. A la API de Android 2.3 se le asigna un identificador de número entero, 9, 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 él antes de instalarla.

    Para usar las APIs de Android 2.3 en tu aplicación, debes compilarla en la biblioteca de Android que se proporciona en la plataforma del SDK de Android 2.3. Según tus necesidades, es posible que también debas agregar un atributo android:minSdkVersion="9" al elemento <uses-sdk> en el manifiesto de la aplicación. Si tu aplicación está diseñada para ejecutarse solo en Android 2.3 y versiones posteriores, declarar el atributo evita que la aplicación se instale en versiones anteriores de la plataforma.

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