Skip to content

Most visited

Recently visited

navigation

Funciones y API de Android O

Android O presenta varias funciones y capacidades nuevas para usuarios y desarrolladores. En este documento, se destacan las novedades para desarrolladores.

Asegúrate de revisar los cambios de comportamiento en Android O para obtener información sobre las áreas en las cuales los cambios en la plataforma pueden afectar tus apps.

Notificaciones

En Android O, hemos rediseñado las notificaciones para proporcionar una manera más sencilla y uniforme de administrar el comportamiento y las configuraciones de las notificaciones. Dentro de estos cambios se incluye lo siguiente:

Una notificación en Android O.
Controles integrados para una notificación en Android O.

Figura 1: En la pantalla de la derecha se muestran los controles integrados para las notificaciones en Android O.

Marco Autofill

La creación de cuentas, el acceso y las transacciones con tarjetas de crédito llevan tiempo y tienden a generar errores. Los usuarios pueden frustrarse fácilmente ante aplicaciones que requieren estos tipos de tareas repetitivas.

Android O hace que resulte más fácil completar formularios, como los de acceso o tarjetas de crédito, gracias a la introducción del marco Autofill. Las aplicaciones existentes y las nuevas funcionan con el marco Autofill una vez que el usuario incluye el autocompletado.

Puedes tomar algunas medidas para optimizar la manera en la que tu aplicación funciona con el marco. Para obtener más información, consulta Información general del marco Autofill.

Modo imagen en imagen

Android O permite el lanzamiento de actividades en el modo de imagen en imagen (PIP). PIP es una clase especial de modo de ventanas múltiples que se usa principalmente para la reproducción de videos. El modo PIP ya se encuentra disponible para Android TV; Android O hace que esta función esté disponible en otros dispositivos de Android.

Cuando una actividad funciona en el modo PIP, se encuentra en un estado de pausa, pero debe continuar mostrando el contenido. Por esta razón, debes asegurarte de que tu aplicación no pause la reproducción en su controlador onPause(). Como alternativa, debes pausar el video en onStop() y reanudar la reproducción en onStart(). Para obtener más información, consulta Ciclo de vida en el modo de ventanas múltiples.

Para especificar que tu actividad puede usar el modo PIP, fija android:supportsPictureInPicture en true en el manifiesto. (A partir de Android O, no es necesario que fijes android:resizeableActivity en true si admites el modo PIP, ya sea en Android TV o en otros dispositivos Android. Solo debes configurar android:resizeableActivity si tu actividad admite otros modos de ventanas múltiples).

Cambios en la API

Android O presenta un objeto nuevo, android.app.PictureInPictureArgs, que se pasa a métodos PIP para especificar el comportamiento que debe tener una actividad cuando se encuentra en el modo PIP. Este objeto especifica propiedades como la relación de aspecto priorizada de la actividad.

Los métodos PIP existentes descritos en Agregar imagen en imagen ahora se pueden usar en todos los dispositivos Android, no solo en Android TV. Además, Android O proporciona los siguientes métodos para admitir el modo PIP:

Trabajo con fuentes

Android O presenta una función nueva, fuentes en XML, que te permite usar fuentes como recursos. Esto significa, que no hay necesidad de integrar fuentes como recursos. Las fuentes se compilan en el archivo R y están disponibles en el sistema como un recurso de manera automática. Puedes acceder a estas fuentes con la ayuda de un nuevo tipo de recurso: font. Android O también proporciona un mecanismo para recuperar información relacionada con fuentes de sistema y proporcionar descriptores de archivos. Para obtener más información sobre el uso de fuentes como recursos y la recuperación de fuentes de sistema, consulta Trabajo con fuentes.

Íconos adaptables

Android O presenta íconos lanzadores adaptables. Los íconos adaptables admiten efectos visuales y pueden mostrar diferentes formas en los diferentes modelos de dispositivos. Para obtener información sobre cómo crear íconos adaptables, consulta la guía de funciones de vista previa Íconos adaptables.

Administración del color

Los desarrolladores de aplicaciones de imagen para Android ahora pueden aprovechar los nuevos dispositivos que ofrecen pantallas capaces de reproducir una amplia gama de colores. Para mostrar imágenes coloridas, las aplicaciones deberán habilitar un indicador en su manifiesto (por actividad) y cargar mapas de bits con un perfil de gran cantidad de colores integrado (AdobeRGB, Pro Photo RGB, DCI-P3, etc.).

Reconocimiento de Wi-Fi

Android O admite el reconocimiento de Wi-Fi, que se basa en la especificación Neighbor Awareness Networking (NAN). Los dispositivos que cuenten con el hardware de reconocimiento de Wi-Fi adecuado, las aplicaciones y los dispositivos cercanos pueden realizar detecciones y establecer comunicaciones a través de Wi-Fi sin un punto de acceso por Internet. Estamos trabajando con nuestros socios de hardware para integrar la tecnología de reconocimiento de Wi-Fi a los dispositivos lo antes posible. Para obtener información sobre cómo integrar el reconocimiento de Wi-Fi en tu app, consulta Reconocimiento de Wi-Fi.

Sincronización de dispositivos complementarios

Android O proporciona las API que te permiten personalizar el diálogo de solicitud de sincronización cuando se intenta realizar la sincronización con dispositivos complementarios a través de Bluetooth, BLE y Wi-Fi. Para obtener más información, consulta la Sincronización de dispositivos complementarios.

Para obtener información sobre el uso de Bluetooth en Android, consulta la guía de Bluetooth. Para obtener información sobre los cambios de Bluetooth específicos para Android O, consulta la sección Bluetooth de la página Cambios de comportamiento de Android O.

WebView API

Android O ofrece varias API para ayudarte a administrar los objetos WebView que muestran contenido web en tu aplicación. Estas API, que mejoran la estabilidad y la seguridad de tu aplicación, son las siguientes:

Para obtener más información sobre cómo usar estas API, consulta Administración de WebViews.

Fijación de combinaciones de teclas y widgets

Android O presenta la fijación de combinaciones de teclas y widgets en la aplicación. En tu aplicación, puedes crear combinaciones de teclas y widgets fijados para los lanzadores admitidos, según lo permita el usuario.

Para obtener más información, consulta la guía de funciones de vista previa Combinaciones de teclas y Widgets.

Accesibilidad

Android O admite las siguientes funciones de accesibilidad para los desarrolladores que creen sus propios servicios de accesibilidad:

Detección de idioma
Para identificar los idiomas que la herramienta Text-to-Speech (TTS) ha identificado en un rango de texto, usa TextClassificationManager.detectLanguages(). Este método aparece en la clase TextClassificationManager, que se presentó en Android O. Puedes usar la lista de objetos android.view.textclassifier.TextLanguage resultante para identificar las áreas de texto asignadas a un idioma específico y la confianza con la que TTS asignó un idioma a un subconjunto de texto determinado.
Botón de accesibilidad

Tu servicio puede solicitar que aparezca un botón de accesibilidad en el área de navegación del sistema mediante la configuración del indicador FLAG_REQUEST_ACCESSIBILITY_BUTTON del atributo android:accessibilityFlags. El botón ofrece a los usuarios una manera rápida de activar la funcionalidad del servicio desde cualquier pantalla del dispositivo. Tu servicio puede registrar callbacks de interacción con el botón usando registerAccessibilityButtonCallback().

Nota: Esta función está disponible solo en dispositivos que proporcionan un área de navegación representada mediante software. Usa el método isAccessibilityButtonAvailable() y el callback onAvailabilityChanged() para realizar un seguimiento de la disponibilidad del botón de accesibilidad. Asegúrate de que los usuarios de tu servicio tengan diferentes maneras de acceder a la funcionalidad en cuestión cuando el botón de accesibilidad no esté disponible.

Gestos de huella digital

Tu servicio de accesibilidad también puede responder a un mecanismo de interacción alternativo, los deslizamientos direccionales (arriba, abajo, izquierda, derecha) en un sensor de huellas digitales del dispositivo. Para recibir callbacks sobre estas interacciones, sigue esta secuencia de pasos:

  1. Declara el permiso USE_FINGERPRINT y la capacidad AccessibilityServiceInfo.CAPABILITY_CAN_CAPTURE_FINGERPRINT_GESTURES.
  2. Configura el indicador AccessibilityServiceInfo.FLAG_CAPTURE_FINGERPRINT_GESTURES en el atributo android:accessibilityFlags.
  3. Regístrate para recibir callbacks usando registerFingerprintGestureCallback().

Recuerda que no todos los dispositivos incluyen sensores de huellas digitales. Puedes usar el método isHardwareDetected() para determinar si un dispositivo admite el sensor. Incluso en dispositivos que incluyen un sensor de huellas digitales, tu servicio puede usar el sensor solo cuando no esté en uso para fines de autenticación. Para determinar el momento en que el sensor está disponible, llama al método isGestureDetectionAvailable() e implementa el callback onGestureDetectionAvailabilityChanged().

Resalte de primer nivel

Para determinar las ubicaciones de caracteres visibles en un objeto TextView, puedes pasar EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY como el primer argumento a refreshWithExtraData(). Luego se carga un objeto Bundle, que proporcionas como segundo argumento para refreshWithExtraData(), a fin de incluir una matriz de objetos Rect. Cada objeto Rect representa el cuadro delimitador de un carácter específico.

Si tu servicio usa un objeto TextToSpeech para dictar el contenido que aparece en pantalla, puedes obtener información de sincronización más precisa sobre el momento en que los motores de texto a voz comienzan a articular palabras individuales sintetizadas. Cuando se prevé que un motor comienza a reproducir audio para un rango específico de texto, la API de texto a voz notifica a tu servicio que la voz para el rango de texto comienza a usar el callback UtteranceProgressListener.onUtteranceRangeStart().

Si creas tu propia implementación de TextToSpeechService, puedes admitir esta nueva funcionalidad usando el método rangeStart().

Texto de sugerencia
Tu servicio puede acceder al texto de sugerencia de un objeto EditText usando el método getHintText() dentro de la clase AccessibilityNodeInfo. Incluso si un objeto EditText específico no muestra actualmente texto de sugerencia, el método getHintText() proporciona de todos modos texto de sugerencia para tu servicio.
Distribución continua de gestos
Tu servicio ahora puede especificar secuencias de trazos que pertenecen al mismo gesto programático usando el argumento final, isContinued, en el constructor GestureDescription.StrokeDescription.

Para obtener más información sobre cómo hacer que tu aplicación sea más accesible, consulta Accesibilidad.

Permisos

Android O presenta un nuevo permiso, android.permission.ANSWER_PHONE_CALLS, que permite a las aplicaciones responder llamadas telefónicas entrantes de forma programática. Este permiso se clasifica como peligroso y forma parte del grupo de permisos PHONE.

Para controlar una llamada telefónica entrante en tu aplicación, puedes usar el método acceptRingingCall() en la clase TelecomManager.

Paginación de proveedores de contenido

Hemos actualizado proveedores de contenido a fin de incluir soporte para la carga de un conjunto de datos grande de a una página a la vez. Por ejemplo, una app de fotografía con miles de imágenes puede consultar un subconjunto de los datos que se presentarán en una página. Cada página de resultados que muestra un proveedor de contenido está representada por un único objeto Cursor. Un cliente y un proveedor deben implementar paginación para usar esta función.

Para obtener información detallada sobre los cambios en los proveedores de contenido, consulta ContentProvider y ContentProviderClient.

Mejoras de medios

Métricas de medios

Un nuevo método getMetrics() muestra un objeto Bundle que contiene información sobre la configuración y el rendimiento, expresada como un mapa de atributos y valores. El método getMetrics() se define para estas clases de medios:

Las métricas se recopilan de forma separada para cada instancia y persisten mientras dure la instancia. Si no hay métricas disponibles, el método muestra el valor null. Las métricas reales que se muestran dependen de la clase.

MediaPlayer

En Android O se agregan varios métodos nuevos para la clase MediaPlayer. Estos métodos pueden mejorar la manera en la que tu aplicación controla la reproducción multimedia de diferentes maneras:

MediaRecorder

Los metadatos pueden ser útiles para el procesamiento sin conexión. Por ejemplo, las señales giroscópicas del sensor podrían usarse para la estabilización de video.

Al agregar una pista de metadatos, el formato mime de la pista debe comenzar con el prefijo "application/". Escribir metadatos es lo mismo que escribir datos de audio y video, con la excepción de que los datos no provienen de un MediaCodec. En su lugar, la aplicación pasa un ByteBuffer con una marca de tiempo asociada al método writeSampleData(). La marca de tiempo debe encontrarse en la misma base de tiempo que las pistas de audio y video.

El archivo MP4 que se genera usa el TextMetaDataSampleEntry definido en la sección 12.3.3.2 de ISOBMFF para indicar el formato MIME de los metadatos. Cuando se usa MediaExtractor para extraer el archivo con la pista de metadatos, el formato MIME de los metadatos se extrae en MediaFormat.

Compatibilidad con visualizaciones múltiples

A partir de la Android O, la plataforma ofrece compatibilidad mejorada con visualizaciones múltiples. Si una actividad admite un modo con ventanas múltiples y se ejecuta en un dispositivo con visualizaciones múltiples, los usuarios pueden mover la actividad de una visualización a otra. Cuando una app inicia una actividad, puede especificar la visualización en la que debe ejecutarse dicha actividad.

Nota: Si una actividad admite un modo de ventanas múltiples, Android O habilita automáticamente la compatibilidad con visualizaciones múltiples para esa actividad. Tienes que probar tu app para asegurarte de que funcione de modo adecuado en un entorno de visualizaciones múltiples.

Solo puede haber una actividad por vez en el estado de reanudación, incluso si la app tiene visualizaciones múltiples. La actividad con enfoque está en el estado reanudado; todas las demás actividades visibles se pausan, pero no se detienen. Para obtener más información sobre el ciclo de vida de las actividades cuando varias actividades son visibles, consulta Ciclo de vida en el modo de ventanas múltiples.

Cuando un usuario mueve una actividad de una visualización a otra, el sistema modifica el tamaño de la actividad y emite cambios de tiempo de ejecución según sea necesario. Tu actividad puede administrar el cambio de configuración por sí misma o permitir que el sistema destruya el proceso que contiene tu actividad y la vuelva a crear con las nuevas dimensiones. Para obtener más información, consulta Manejar cambios de configuración.

Cambios en la API

ActivityOptions proporciona dos métodos nuevos para admitir visualizaciones múltiples:

setLaunchDisplayId()
Especifica la visualización en la cual se debe mostrar la actividad cuando se inicia.
getLaunchDisplayId()
Muestra la visualización de lanzamiento actual de la actividad.

Actualizaciones de herramientas

El shell de abd se extiende para admitir visualizaciones múltiples. El comando de shell startahora se puede usar para lanzar una actividad y especificar la visualización de destino de esta:

adb shell start <activity_name> --display <display_id>

Acceso a la cuenta nueva y las API de detección

Android O presenta varias mejoras respecto de la forma en que las aplicaciones obtienen acceso a las cuentas de los usuarios. Para las cuentas que controlan, los autenticadores pueden usar su propia política a fin de decidir si ocultan o muestran cuentas a una aplicación. El sistema Android rastrea las aplicaciones que pueden acceder a una cuenta específica.

En las versiones previas de Android, las aplicaciones que intentaban rastrear la lista de cuentas de usuarios debían obtener actualizaciones de todas las cuentas, incluidas las cuentas con tipos no relacionados. Android O agrega el método addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]), el cual permite que en las aplicaciones se especifique una lista de tipos de cuentas para las cuales deben recibirse cambios de cuentas.

Cambios en la API

AccountManager proporciona seis métodos nuevos para que los autenticadores puedan administrar las apps que pueden detectar una cuenta:

Android O presenta dos valores de nombre de paquete especiales a fin de especificar los niveles de visibilidad para aplicaciones que no se configuraron con el método setAccountVisibility(android.accounts.Account, java.lang.String, int). El valor de visibilidad PACKAGE_NAME_KEY_LEGACY_VISIBLE se emplea en las aplicaciones que tienen el permiso GET_ACCOUNTS, y versiones de destino de Android anteriores a Android O, o cuyas firmas coincidan con el autenticador de cualquier versión de Android. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE proporciona un valor de visibilidad predeterminado para aplicaciones que no configuran previamente y para las que no se aplica PACKAGE_NAME_KEY_LEGACY_VISIBLE.

Para obtener más información sobre el acceso a la cuenta nueva y las API de detección, consulta la referencia de AccountManager y OnAccountsUpdateListener.

AnimatorSet

A partir de Android O, la API AnimatorSet admite la búsqueda y la reproducción en sentido inverso. La búsqueda te permite configurar la posición de la animación fijada en un punto específico en el tiempo. La reproducción en sentido inverso es útil si tu app incluye animaciones para acciones que se puedan deshacer. En lugar de definir dos configuraciones de animación separadas, puedes reproducir la misma en sentido inverso.

Ajuste automático de tamaño de TextView

Android O te permite configurar el valor de expansión o contracción de tu texto automáticamente según el tamaño de TextView. Esto significa que es mucho más sencillo optimizar el tamaño de texto en diferentes pantallas o con contenido dinámico. Para obtener más información sobre el ajuste automático de tamaño de TextView en Android O, consulta Ajuste automático de tamaño de TextView.

Categorías de aplicaciones

Android O permite que cada aplicación declare una categoría a la que pertenezca, cuando corresponda. Esas categorías se usan para agrupar aplicaciones con un propósito o una función similar al presentarlas a los usuarios, como en el caso del uso de datos, de batería o de almacenamiento. Puedes definir una categoría para tu aplicación configurando el atributo android:appCategory en la etiqueta <application> del manifiesto.

Nuevos detectores StrictMode

Android O agrega tres detectores StrictMode nuevos para ayudar a identificar posibles errores en tu aplicación:

Datos almacenados en caché

Android O ofrece mejor orientación y comportamientos para los datos almacenados en caché. Cada aplicación ahora recibe una cuota de espacio en disco para datos almacenados en caché, como lo muestra getCacheQuotaBytes(UUID).

Cuando el sistema deba liberar espacio en el disco, comenzará por borrar los archivos almacenados en caché de las aplicaciones que más hayan superado su cuota asignada. Por lo tanto, si mantienes el volumen de datos almacenados en caché en valores inferiores al de la cuota asignada, tus archivos almacenados en caché estarán entre los últimos del sistema que se borrarán cuando sea necesario. Cuando el sistema determine los archivos almacenados en caché que borrará dentro de tu aplicación, dará prioridad a los archivos más antiguos (la antigüedad se determinará por la fecha y hora de modificación).

También hay dos comportamientos nuevos que puedes habilitar por directorio para controlar la manera en que el sistema elimina tus datos almacenados en caché:

Por último, cuando necesites asignar espacio en disco para archivos grandes, ten en cuenta la nueva allocateBytes(FileDescriptor, long) API, que borrará automáticamente los archivos almacenados en caché pertenecientes a otras aplicaciones (según sea necesario) para poder cumplir con tu solicitud. Cuando debas decidir si el dispositivo tiene suficiente espacio en disco para tus nuevos datos, llama a getAllocatableBytes(UUID) en lugar de usar getUsableSpace(), ya que el primero abarcará todos los datos almacenados en caché que el sistema quiera borrar por ti.

Acceso mejorado a archivos multimedia

El marco de acceso a almacenamiento (SAF) permite que las aplicaciones expongan un DocumentsProvider personalizado, que puede proporcionar a otras aplicaciones acceso a archivos en una fuente de datos. De hecho, un proveedor de documentos incluso puede proporcionar acceso a archivos almacenados en la red o que usan un protocolo como el protocolo de transferencia multimedia (MTP).

No obstante, el acceso a archivos multimedia de gran tamaño desde una fuente de datos remota presenta algunos desafíos. Los reproductores multimedia requieren acceso que admita búsquedas para un archivo a través de un proveedor de documentos. Cuando un archivo multimedia de gran tamaño se encuentre en una fuente de datos remota, el proveedor de documentos deberá obtener todos los datos por adelantado y crear un descriptor de archivo de resumen. El reproductor multimedia no puede reproducir el archivo sin el descriptor de archivo, por lo que la reproducción no comenzará hasta que el proveedor de documentos termine de descargar el archivo.

A partir de Android O, el marco de acceso a almacenamiento permite que proveedores de documentos personalizados creen descriptores de archivos que admitan búsquedas para archivos que residan en una fuente de datos remota. El SAF puede abrir un archivo para obtener un descriptor de archivos que admitan búsquedas. Luego, el SAF proporciona solicitudes de bytes discretas al proveedor de documentos. Esta función permite a un proveedor de documentos mostrar el rango de bytes exacto que una aplicación de reproducción multimedia solicita, en lugar de almacenar en caché el archivo completo por adelantado.

Para usar esta función, debes llamar al nuevo método StorageManager.openProxyFileDescriptor(). El método openProxyFileDescriptor() acepta un objeto ProxyFileDescriptorCallback como callback. El SAF invoca el callback en cualquier momento que una aplicación cliente realice operaciones relacionadas con archivos en el descriptor de archivos que muestra el proveedor de documentos.

Android en la empresa

Android Enterprise presenta muchas funciones y API nuevas para dispositivos con Android O. Hicimos que los modos de administración de propietario de perfil y propietario de dispositivo sean más potentes, productivos y fáciles de proporcionar que nunca antes. También habilitamos un escenario de implementación totalmente nuevo.

Entre los aspectos destacados se encuentran los siguientes:

Para obtener más información sobre las nuevas API y funciones para Android Enterprise en Android O, consulta la página Android en la empresa.

Actualizaciones del lenguaje de programación Java

En Android O, agregamos funciones de lenguaje Java OpenJDK para Android. Estamos agregando java.time de OpenJDK 8, y también java.nio.file y java.lang.invoke, incluido MethodHandle, de OpenJDK 7. Mira los nuevos paquetes en el Informe de diferencias de las API.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.