API de Android 2.3

Nivel de API: 9

Para los desarrolladores, la versión 2.3 (GINGERBREAD) 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 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 2.3, incluidas las nuevas funciones y los cambios en el marco desde la versión anterior.

VoIP basada en SIP

La plataforma ahora incluye una pila de protocolo SIP y una API de framework que permite desarrolladores a compilar aplicaciones de telefonía por Internet. Con la API, las aplicaciones pueden ofrecer funciones de llamadas de voz sin tener que administrar sesiones, objetivos comunicación o audio, estos se manejan con transparencia por la API y los servicios de SIP de la plataforma.

La API de SIP está disponible en android.net.sip . La clase clave es SipManager, y las aplicaciones usar para configurar y administrar perfiles SIP, iniciar llamadas de audio y recibir llamadas de audio. Una vez que se establece una llamada de audio, las aplicaciones pueden silenciar las 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 SIP subyacente y los servicios de la plataforma están disponibles en dispositivos en 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 llamadas a los usuarios.

Para usar la API de SIP, las aplicaciones deben solicitar permiso al usuario antes del Declarar <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 el filtrado en Google Play para que sus aplicaciones no sean detectables por los usuarios cuyos dispositivos no incluyan la pila y los servicios de SIP de la plataforma. Para solicitar filtros, 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 sobre 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 habilitado para NFC para etiquetar elementos incorporados en calcomanías, carteles inteligentes y hasta en otros dispositivos.

La plataforma proporciona los servicios de NFC subyacentes 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, luego, agrega los mensajes NDEF de la etiqueta al intent como elementos adicionales. Las aplicaciones pueden crear filtros de intents para reconocen y manejan etiquetas y mensajes orientados. Por ejemplo, después de recibir un etiqueta por intent, las aplicaciones extraen los mensajes NDEF, los almacenan, alertan al usuario o los manejas 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 del dispositivo.
  • NdefMessage, que representa un mensaje de datos NDEF, el formato estándar en el que se transmiten los "registros" que llevan datos entre dispositivos y etiquetas. Las aplicaciones pueden recibir estos mensajes de intents ACTION_TAG_DISCOVERED.
  • NdefRecord, se entregó en un NdefMessage, que describe el tipo de datos que se comparten transporta los datos en sí.

La comunicación NFC depende de la tecnología inalámbrica en el hardware del dispositivo, por lo que la compatibilidad con las funciones de NFC de la plataforma en dispositivos específicos está determinada por a sus fabricantes. Para determinar la compatibilidad con NFC en el dispositivo actual, aplicaciones pueden llamar a isEnabled() para consulta NfcAdapter. La API de NFC siempre está presente independientemente de la compatibilidad con el 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 el filtrado en Google Play para que sus aplicaciones no sean detectables por los usuarios cuyos dispositivos no admiten 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 de lectura de sensores nuevos: giroscopio, vector de rotación, aceleración lineal, gravedad y barómetro. Los desarrolladores pueden usar las nuevas lecturas de los sensores para crear aplicaciones que respondan de forma rápida y fluida a cambios precisos en la posición y el movimiento del dispositivo. El La API de Sensor informa el giroscopio y otros cambios en el sensor a interesados aplicaciones, ya sea que se ejecuten en el framework de aplicaciones o en aplicaciones código.

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

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

Para obtener detalles de la API, consulta Sensor.

Compatibilidad con varias cámaras

Las aplicaciones ahora pueden usar cualquier cámara que esté disponible en un dispositivo, para la captura de fotos o videos. 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 la imagen estática. el nivel de calidad de captura de una cámara específica.

Para ver un ejemplo de código para acceder a una cámara frontal, consulta CameraPreview.java en la aplicación de ejemplo de 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 o por pista. como potenciador de graves, 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 etiquetas de altitud en metadatos EXIF para archivos JPEG. 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 las descargas HTTP de larga duración. Las aplicaciones pueden solicitar que se descargue un URI en un archivo de destino particular. El DownloadManager realizará la descarga en segundo plano teniendo en cuenta las interacciones HTTP y reintentar las descargas después de fallas o entre cambios de conectividad y reinicios.

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

StrictMode

Para ayudar a los desarrolladores a supervisar y mejorar el rendimiento de sus aplicaciones, La plataforma ofrece una instalación de sistema nueva llamada StrictMode. Cuando se implementa en una aplicación, StrictMode detecta y notifica al desarrollador de actividades accidentales de disco o red que podrían degradar la aplicación rendimiento, como la actividad que se produce en el subproceso principal de la aplicación (en la que se reciben operaciones de la IU y también se llevan a cabo animaciones). Los desarrolladores pueden evaluar los problemas de uso de red y disco que se generan 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 la integración principal. con el sistema y la VM. La clase proporciona métodos convenientes para gestionar las políticas de subproceso y VM que se aplican a la instancia.
  • StrictMode.ThreadPolicy y StrictMode.VmPolicy contienen las políticas que defines y aplicas a subproceso e instancias de VM.

Para obtener más información sobre cómo usar StrictMode para optimizar tu 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 desplazamiento horizontal para una vista determinada, establecer el modo de desplazamiento horizontal, controlar la distancia de desplazamiento horizontal y controlar los resultados del desplazamiento horizontal.
    • En Widgets, las aplicaciones pueden controlar las características de desplazamiento, animación, springback y 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: overScrollMode, overScrollFooter y Atributos overScrollHeader para elementos <ListView>, para controlar el comportamiento de desplazamiento.
  • Compatibilidad con el filtrado táctil
    • Nueva compatibilidad con el filtrado táctil, que permite que una aplicación mejore la la seguridad de los objetos View que proporcionan acceso a funciones sensibles. Por ejemplo: el filtrado táctil es adecuado para garantizar la seguridad de las acciones del usuario, otorgar una solicitud de permiso, realizar una compra o hacer clic en una anuncio. Para obtener más información, consulta la clase View documentación.
    • Nuevo atributo filterTouchesWhenObscured para elementos de vista que declara si se deben filtrar los toques cuando la ventana de la vista está oculta en otra ventana visible. 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 Cómo ver la seguridad documentación para obtener más detalles.

    Para ver el código de muestra del 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, como como consultando el InputDevice desde el que se originó el evento. KeyEvent y MotionEvent son subclases de InputEvent.
    • Nueva clase base para dispositivos de entrada, InputDevice. El 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 una dispositivo de entrada.
  • Eventos de movimiento mejorados
    • Se extiende la API de MotionEvent para incluir "ID de puntero". información, lo que permite a las aplicaciones hacer un seguimiento de los dedos individuales a medida que se moverá hacia arriba y hacia abajo. La clase agrega una variedad de métodos que permiten a una aplicación de manera eficiente con eventos de movimiento.
    • El sistema de entrada ahora tiene lógica para generar eventos de movimiento con el nuevo información del ID del puntero y sintetizar identificadores a medida que se bajan los nuevos punteros. El el sistema rastrea varios ID de puntero por separado durante un evento de movimiento garantiza la continuidad adecuada de los punteros evaluando 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 un región del texto como texto compuesto, manteniendo el estilo actual. Un método getSelectedText muestra 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 anclas de selección de texto y el estilo de la ventana contenedora.
  • Controles de actividad
  • Estilos de texto y íconos de notificaciones
  • Pantallas extragrandes

    La plataforma ahora admite tamaños de pantalla extragrandes, como los que se pueden encontrar en dispositivos de tablet. Los desarrolladores pueden indicar que sus aplicaciones son Se diseñó para admitir tamaños de pantalla extragrandes agregando un elemento <supports screens ... android:xlargeScreens="true"> al manifiesto. archivos. Las aplicaciones pueden usar un nuevo calificador de recursos, xlarge, para etiquetar recursos específicos de pantallas extragrandes. Para obtener detalles sobre cómo admitir pantallas extragrandes y otros tamaños, consulta Compatibilidad con 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 elementos adicionales que se pueden usar para iniciar una actividad para establecer una alarma nueva en una aplicación de reloj despertador. Las aplicaciones que deseen 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(), de modo que el usuario tenga la opción de elegir qué aplicación de reloj despertador usar.
    • MediaStore admite una nueva acción de intent, PLAY_FROM_SEARCH, que permite que una aplicación busque contenido multimedia musical y reproducir contenido automáticamente desde el resultado cuando sea 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 de contenido multimedia que ignore el contenido multimedia en el directorio contenedor y sus subdirectorios. Los desarrolladores pueden usar esto para evitar que aparezcan gráficos en la Galería y, del mismo modo, evitar que los sonidos y la música de la aplicación aparezcan en la app de Música.
    • El proveedor Settings agrega las nuevas acciones de actividad APPLICATION_DETAILS_SETTINGS y MANAGE_ALL_APPLICATIONS_SETTINGS, que permiten que una aplicación muestre 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, por Almacenar la dirección SIP (telefonía por Internet) de un contacto

    Ubicación

    • LocationManager ahora realiza un seguimiento de las solicitudes de la aplicación que generan bloqueos de activación o bloqueos 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 ellos como un parámetro WorkSource cuando establece sus tiempos de actualización mínimos. El proveedor de ubicación de red usa WorkSource para rastrear la bloqueos de activación y Wi-Fi que inicia una aplicación y los agrega al servicio uso de batería informado en Administrar aplicaciones.

    • LocationManager agrega varios métodos nuevos que permiten que un registro de actividad reciba actualizaciones de ubicación periódicas o únicas según criterios especificados (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, es posible que los proveedores ordenados de acuerdo con la precisión, el consumo de energía, la capacidad de informar la altitud, la velocidad y el costo monetario.

    Almacenamiento

    • Android 2.3 agrega un nuevo StorageManager que admite archivos OBB (Opaque Binary Blob). Aunque la compatibilidad de la 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 de 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 conveniente, 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 transmisión en una red UMTS.

    Acceso nativo al ciclo de vida de la actividad y a las ventanas

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

    • NativeActivity es un nuevo tipo de clase Activity, cuyo Las devoluciones de llamada de ciclo de vida se implementan directamente en el código nativo. R NativeActivity y su código nativo subyacente se ejecutan en el sistema al igual que otras actividades, que se ejecutan en la biblioteca proceso del sistema de la aplicación y se ejecutan 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 las filas 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 el código y plataformas de Google.

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

    Entorno de ejecución de Dalvik

    Nuevos elementos y atributos del manifiesto

    • Nuevo atributo xlargeScreens para el elemento <supports-screens>, que indica si la aplicación admite factores de forma de pantalla extragrandes. Para obtener más información, consulta Compatibilidad con varios Pantallas.
    • Valores nuevos para el atributo android:screenOrientation de Elemento <activity>:
      • "reverseLandscape": La actividad solicita tener la pantalla en orientación horizontal, girada en la dirección opuesta a la normal horizontal.
      • "reversePortrait": La actividad desea que la pantalla tenga orientación vertical, girada en la dirección opuesta al modo vertical normal.
      • "sensorLandscape": A la actividad le gustaría tener la pantalla en orientación horizontal, pero puede usar el sensor para cambiar la dirección en la que se encuentra la pantalla.
      • "sensorPortrait": La actividad solicita tener la orientación vertical en la pantalla, pero puedes usar el sensor para cambiar la dirección hacia la pantalla.
      • "fullSensor": La orientación se determina mediante una conexión Orientación: la pantalla rotará en función de cómo el usuario mueva la dispositivo. Esto permite cualquiera de las 4 rotaciones posibles, independientemente de lo que el dispositivo haga normalmente (por ejemplo, algunos dispositivos no suelen usar la rotación de 180 grados).

    Nuevos permisos

    • 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 debe requerir este permiso.
    • android.permission.USE_SIP: Permite que una aplicación use la SIP API para realizar o recibir llamadas por Internet.
    • android.permission.NFC: Permite que una aplicación use la NFC API para leer etiquetas NFC.

    Constantes de funciones nuevas

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

    Para obtener toda la información sobre cómo declarar funciones y usarlas en consulta la documentación de <uses-feature>.

    Informe de diferencias de API

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

    Nivel de API

    La plataforma Android 2.3 ofrece una versión actualizada de la API del framework. A la API de Android 2.3 se le asigna un identificador de número entero (9) que se almacena 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 2.3, debes compilar la aplicación 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 se instale en versiones anteriores de la plataforma.

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