Prepárate para 12L, una actualización de funciones para pantallas grandes que se lanzará a principios del próximo año. Pruébala hoy.

Descripción general de las funciones y API

Android 12 incluye excelentes funciones y API para desarrolladores. En las siguientes secciones, obtendrás información sobre las funciones de tus apps y cómo comenzar a usar las API relacionadas.

Para obtener una lista detallada de las API nuevas, modificadas y quitadas, consulta el informe de diferencias de API. A fin de obtener detalles sobre las nuevas API, consulta la referencia de la API de Android. Las nuevas API están destacadas para que sea más fácil identificarlas. Además, para conocer las áreas en las que los cambios de la plataforma podrían afectar tus apps, asegúrate de revisar los cambios en el comportamiento de Android 12 para apps orientadas a Android 12 y todas las apps.

Experiencia del usuario

Material You

Android 12 presenta un lenguaje de diseño nuevo denominado Material You, que te ayuda a compilar apps más personalizadas y atractivas. Para implementar en las apps todas las últimas actualizaciones de Material Design 3, prueba una versión alfa de los componentes de Material Design.

Material You

Mejoras de widgets

Android 12 renovó la API de Widgets existente para mejorar la experiencia del usuario y del desarrollador en la plataforma y los launchers. Creamos una guía para ayudarte a que te asegures de que el widget sea compatible con Android 12 y para actualizarlo con funciones nuevas.

Consulta Mejoras de widgets en Android 12 para obtener más información.

Inserción de contenido enriquecido

Android 12 introduce una nueva API unificada que permite que la app reciba contenido enriquecido de cualquier fuente disponible: portapapeles, teclado o arrastrar y soltar.

Si quieres obtener más información, consulta Cómo recibir contenido enriquecido.

API de pantallas de presentación de la app

En Android 12, se introduce una animación nueva de inicio para todas las apps, la cual incluye un movimiento de entrada a la app desde el punto de inicio, una pantalla de presentación que muestra el ícono de la app y una transición a la app en sí misma. Si deseas obtener más información, consulta la guía para desarrolladores de pantallas de presentación.

API de esquinas redondeadas

En Android 12, se introducen RoundedCorner y WindowInsets.getRoundedCorner(int position), que brindan el radio y el punto central de las esquinas redondeadas.

Para obtener más información, consulta Esquinas redondeadas.

Experiencia táctil enriquecedora

Android 12 expande las herramientas con el fin de crear respuestas táctiles informativas para eventos de la IU, efectos envolventes y atractivos para videojuegos, y tecnología táctil que exige atención para la productividad.

Efectos de accionador

Android 12 agrega efectos expresivos, por ejemplo, la marca de frecuencia baja que aprovechan el ancho de banda de frecuencia más amplio de los últimos accionadores. Los desarrolladores de videojuegos ahora pueden acceder a varios accionadores diferentes de forma independiente en los controles de juegos para brindar el mismo efecto de manera síncrona o diferentes efectos táctiles en varios accionadores. Si eres desarrollador, te recomendamos que uses las constantes y las primitivas como componentes básicos para los efectos táctiles enriquecidos: constantes que mejoran los eventos de la IU y el compositor táctil para secuenciar las primitivas a fin de obtener efectos más complejos. Estas API están disponibles para probarlas en dispositivos Pixel 4, y continuamos trabajando con nuestros socios fabricantes de dispositivos a fin de ofrecerles a los usuarios lo último en compatibilidad táctil de todo el ecosistema.

Efectos táctiles vinculados con audio

Las apps de Android 12 pueden generar respuestas táctiles derivadas de una sesión de audio mediante el vibrador del teléfono, lo cual proporciona una oportunidad para experiencias de juego y audio más envolventes. Por ejemplo, los tonos mejorados con respuesta táctil pueden ayudar a identificar a los emisores, o un juego de conducción podría simular la sensación de un terreno empinado.

Consulta la documentación de referencia de HapticGenerator para obtener más información.

AppSearch

Android 12 introduce AppSearch, un motor de búsqueda en el dispositivo de alto rendimiento, como un servicio del sistema. AppSearch permite que las aplicaciones indexen datos estructurados y busquen con funciones integradas de búsqueda en el texto completo. Además, AppSearch admite funciones de búsqueda nativa, como la indexación y recuperación de alta eficiencia, la compatibilidad con varios idiomas y la clasificación por relevancia.

Diagrama en el que se ilustra la indexación y la búsqueda dentro de AppSearch

AppSearch se ofrece en dos variantes: un índice local compatible con versiones anteriores de Android para que lo use la aplicación o un índice central que se mantiene para todo el sistema en Android 12. Con el índice central, la aplicación puede permitir que el componente de inteligencia preinstalado del sistema muestre sus datos en las superficies de la IU de este. Depende del OEM los datos que se muestran exactamente en las superficies de la IU del sistema. Además, la aplicación puede compartir datos de forma segura con otras aplicaciones, para también permitirles realizar búsquedas en estos.

Obtén más información sobre AppSearch en la guía para desarrolladores y comienza a usarlo con la biblioteca de Jetpack de AppSearch, que brinda una plataforma de API fácil de usar para desarrolladores, además de compatibilidad con procesadores de anotaciones.

Game Mode

La API y las intervenciones de Game Mode te permiten optimizar el juego mediante la priorización de características, como el rendimiento o la duración de batería, en función de la configuración del usuario o de parámetros específicos del juego.

Para obtener más información, consulta Game Mode.

Mejoras de pantalla en pantalla (PiP)

En Android 12, se introducen las siguientes funciones nuevas para el modo de PiP:

  • Marca nueva de API para brindar una transición más fluida al modo de PiP en la navegación por gestos

    Usa la marca setAutoEnterEnabled a fin de brindar transiciones más fluidas al modo de PiP cuando deslizas el dedo hacia arriba para ir a la pantalla principal en el modo de navegación por gestos. Anteriormente, Android esperaba a que terminara la animación de este deslizamiento hacia arriba antes de aplicar el fundido de entrada para la ventana de PiP.

  • Marca nueva de API para inhabilitar el cambio fluido de tamaño de contenido que no sea video

    La marca SeamlessResizeEnabled brinda una animación entre difuminados mucho más fluida cuando se modifica el tamaño de contenido que no es video en la ventana de PiP. Anteriormente, si se cambiaba el tamaño de este tipo de contenido en una ventana de PiP, se podían crear artefactos visuales molestos.

  • Animaciones más fluidas para salir del modo de PiP

    Ahora, la marca SourceRectHint se vuelve a usar para implementar animaciones más fluidas cuando se sale del modo de PiP. Para salir, el sistema crea la animación con el elemento sourceRectHint disponible actualmente, ya sea el objeto Rect original que se usa a fin de ingresar al modo de PiP o un parámetro Rect actualizado que proporciona la app.

  • Compatibilidad con gestos nuevos

    En Android 12, ahora se admiten gestos cuando almacenas la ventana de PiP y pellizcas para hacerle zoom:

    • Para almacenar la ventana, el usuario puede arrastrarla hacia el borde izquierdo o derecho. Para dejar de almacenar la ventana, el usuario puede presionar la parte visible de la ventana almacenada o arrastrarla hacia afuera.

    • Ahora, el usuario puede cambiar el tamaño de la ventana de PiP con la función de pellizcar para hacerle zoom.

Para obtener más información sobre los comportamientos nuevos que afectan a las apps que se orientan a Android 12 o versiones posteriores, consulta Mejoras en el comportamiento de pantalla en pantalla. Para obtener instrucciones sobre la implementación de la función, consulta Compatibilidad con pantalla en pantalla.

Notificaciones nuevas de llamadas telefónicas que permiten clasificar la importancia de las llamadas entrantes

En Android 12, se agrega el estilo nuevo de notificación Notification.CallStyle para llamadas telefónicas. Usar esta plantilla permite que la app indique la importancia de las llamadas activas. Para ello, muestra un chip destacado que indica la hora de la llamada en la barra de estado; el usuario puede presionar este chip si desea volver a la llamada.

Como las llamadas entrantes y en curso son las más relevantes para los usuarios, estas notificaciones se clasifican, y se muestran las principales en el panel. Esta clasificación también permite que, posiblemente, el sistema desvíe estas llamadas con prioridad a otros dispositivos.

Implementa el siguiente código para todos los tipos de llamadas.

Kotlin

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()

Java

// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

Usa forIncomingCall() a fin de crear una notificación con estilo para una llamada entrante.

Kotlin

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)

Java

// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

Usa forOngoingCall() a fin de crear una notificación con estilo para una llamada en curso.

Kotlin

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)

Java

// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

Usa forScreeningCall() a fin de crear una notificación con estilo para filtrar una llamada.

Kotlin

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)

Java

Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

Compatibilidad con imágenes mejoradas para notificaciones

En Android 12, ahora, puedes mejorar la experiencia de notificaciones de la app con imágenes animadas en las notificaciones de MessagingStyle() y BigPictureStyle(). Además, la app ahora puede permitir que los usuarios envíen mensajes de imagen cuando responden mensajes desde el panel de notificaciones.

Mejoras en el modo envolvente para la navegación por gestos

Android 12 consolida el comportamiento existente para facilitar que los usuarios realicen comandos de navegación por gestos en el modo envolvente. Además, 12 brinda comportamiento de retrocompatibilidad para el modo envolvente fijo.

Uso compartido de URL recientes (solo Pixel)

En dispositivos Pixel, los usuarios ahora pueden compartir vínculos al contenido web que vieron hace poco, directamente desde la pantalla Recientes. Después de visitar el contenido de una app, el usuario puede deslizar el dedo para ir a la pantalla Recientes, buscar la app en la que vio el contenido y, luego, presionar el botón de vínculo a fin de copiar o compartir la URL.

Para obtener más información, consulta Cómo habilitar el uso compartido de URL recientes.

Seguridad y privacidad

Panel de privacidad

En un cronograma vertical, se muestran las diferentes apps que accedieron a la información de la ubicación y la hora en la que se produjo el acceso.
Figura 1: Pantalla de uso de la ubicación, parte del panel de privacidad.

En dispositivos compatibles que ejecutan Android 12 o versiones posteriores, aparece la pantalla del panel de privacidad en la configuración del sistema. En esta pantalla, los usuarios pueden acceder a distintas pantallas que se muestran cuando las apps acceden a la información de la ubicación, la cámara y el micrófono. En cada una, se muestra un cronograma del momento en que diferentes apps accedieron a un tipo específico de datos. En la Figura 1, se muestra el cronograma de acceso a los datos para la información de la ubicación.

La app puede mostrarles los motivos a los usuarios para que comprendan por qué la app accede a la información de la ubicación, la cámara o el micrófono. Esos motivos pueden aparecer en la pantalla nueva del panel de privacidad, en la pantalla de permisos de la app o en ambas.

Permisos de Bluetooth

En Android 12, se introducen los permisos BLUETOOTH_SCAN, BLUETOOTH_ADVERTISE y BLUETOOTH_CONNECT. Estos permisos facilitan la interacción con dispositivos Bluetooth para las apps que se orientan a Android 12, en especial para las que no requieren acceso a la ubicación del dispositivo.

Actualiza las declaraciones de permisos de Bluetooth de la app

Si deseas preparar el dispositivo para que se oriente a Android 12 o versiones posteriores, actualiza la lógica de la app. En lugar de declarar un conjunto heredado de permisos de Bluetooth, declara un conjunto más moderno de estos.

Búsqueda de grupos de permisos

En Android 12 o versiones posteriores, puedes consultar cómo el sistema organiza en grupos los permisos que proporciona la plataforma:

Oculta ventanas de superposición de aplicaciones

A fin de brindarles a los desarrolladores más control sobre el contenido que ven los usuarios cuando interactúan con la app del desarrollador, en Android 12, se introduce la habilidad de ocultar ventanas de superposición que dibujan las apps con el permiso SYSTEM_ALERT_WINDOW..

Después de declarar el permiso HIDE_OVERLAY_WINDOWS, una app puede llamar a setHideOverlayWindows() para indicar que todas las ventanas de tipo TYPE_APPLICATION_OVERLAY deben ocultarse cuando la propia ventana de la app está visible. Las apps pueden decidir hacerlo cuando muestran pantallas sensibles, como flujos de confirmación de transacciones.

Las apps que muestran ventanas del tipo TYPE_APPLICATION_OVERLAY deben tener en cuenta alternativas que sean más apropiadas para su caso de uso, como pantalla en pantalla o burbujas.

Marca de protección de permisos de firmantes conocidos

A partir de Android 12, el atributo knownCerts para los permisos de nivel de firma te permite hacer referencia a los resúmenes de los certificados de firmas conocidos en el momento de la declaración.

La app puede declarar este atributo y usar la marca knownSigner para permitir que los dispositivos y las apps les otorguen permisos de firma a otras apps, sin tener que firmarlas en el momento de fabricación y envío del dispositivo.

Certificación de propiedades del dispositivo

Android 12 expande el conjunto de apps que pueden verificar las propiedades del dispositivo que se encuentran en un certificado de atestación cuando estas apps generan una clave nueva.

A partir de Android 9 (nivel de API 28), los propietarios de las políticas del dispositivo (DPO) que usan Keymaster 4.0 o versiones posteriores pueden verificar las propiedades del dispositivo en estos certificados de atestación. A partir de Android 12, cualquier app que se oriente a Android 12 (nivel de API 31) o versiones posteriores puede realizar esta verificación con el método setDevicePropertiesAttestationIncluded().

Las propiedades del dispositivo generadas incluyen los siguientes campos Build:

  • BRAND
  • DEVICE
  • MANUFACTURER
  • MODEL
  • PRODUCT

Protege las acciones de notificación de la pantalla de bloqueo

A partir de Android 12, la clase Notification.Action.Builder admite el método setAuthenticationRequired(), que permite que la app exija que se desbloquee el dispositivo antes de que esta invoque una acción de notificación determinada. Este método permite agregar una capa de seguridad adicional a las notificaciones en dispositivos bloqueados.

Strings localizables para BiometricPrompt

Android 12 introduce API nuevas para ayudarte a mejorar la experiencia del usuario de la autenticación biométrica de la app. La nueva clase BiometricManager.Strings anidada incluye getButtonLabel(), getPromptMessage() y getSettingName(), que permiten que la app recupere una etiqueta de botón localizada y legible para el usuario, un mensaje de solicitud o un nombre de configuración de la app. Usa estas etiquetas a fin de crear instrucciones más precisas para el usuario que sean específicas de los métodos de autenticación biométrica usados, como "Usa el desbloqueo facial" o "Usa tu huella dactilar para continuar".

Detección de suplantación de identidad en apps de mensajería (solo Pixel)

Un usuario recibe un mensaje como este cuando se detecta un mensaje sospechoso.

En dispositivos Pixel compatibles, Android 12 ejecuta la detección de suplantación de identidad (phishing) en los mensajes que se reciben en apps de mensajería populares. Una vez que el usuario habilita esta función, el sistema usa el aprendizaje automático en el dispositivo para detectar actividades sospechosas. Si se detecta algo, el sistema muestra una superposición de seguridad sobre la IU de la app de mensajería para advertir a los usuarios. Por ejemplo, la detección de suplantación de identidad puede advertirles a los usuarios los siguientes posibles riesgos:

  • Solicitudes sospechosas, como enviar un código, dinero o solicitudes similares
  • URL no confiables
  • Archivos adjuntos maliciosos
  • Vínculos a apps maliciosas

Además de advertirle al usuario, la superposición también le permite denunciar un mensaje sospechoso y enviar comentarios sobre las advertencias que emite el sistema.

Los desarrolladores pueden inhabilitar esta función si agregan una etiqueta nueva de metadatos, incluida la string com.google.android.ALLOW_PHISHING_DETECTION en los archivos de manifiesto de su app. Por ejemplo:

<manifest>
    <application android:name="com.messagingapp">
        <meta-data android:name="com.google.android.as.ALLOW_PHISHING_DETECTION" android:value="false" />

    </application>
</manifest>

Multimedia

Transcodificación de contenido multimedia compatible

A partir de Android 12 (nivel de API 31), el sistema puede transcodificar automáticamente los videos HEVC(H.265) y HDR (HDR10 y HDR10+) grabados en el dispositivo a AVC (H.264), un formato compatible en gran medida con los reproductores estándar. Aprovecha los códecs modernos cuando están disponibles sin sacrificar la compatibilidad con las aplicaciones más antiguas.

Para obtener más información, consulta Transcodificación de contenido multimedia compatible.

Clase de rendimiento

Android 12 introduce un estándar que se denomina clase de rendimiento. Una clase de rendimiento especifica las capacidades de hardware más allá de los requisitos del modelo de referencia de Android. Cada dispositivo Android declara la clase de rendimiento que admite. Los desarrolladores pueden verificar la clase de rendimiento del dispositivo en el tiempo de ejecución y ofrecer experiencias mejoradas que aprovechen al máximo las capacidades del dispositivo.

Consulta Clase de rendimiento para obtener más información.

Mejoras de codificación de video

En Android 12, se define un conjunto estándar de claves a fin de controlar el valor del parámetro de cuantización (QP) para la codificación de video, lo que les permite a los desarrolladores evitar el código específico del proveedor.

Las claves nuevas están disponibles en la API de MediaFormat, además de en la biblioteca de medios del NDK.

A partir de los codificadores de video de Android 12, se aplica de manera forzosa un umbral mínimo de calidad. De esta manera, se garantiza que los usuarios no experimenten una calidad extremadamente baja cuando codifiquen videos con una complejidad alta de escena.

Enfoque de audio

A partir de Android 12 (nivel de API 31), cuando una app solicita el foco de audio mientras otra app en reproducción lo tiene, el sistema aplica un fundido de salida en la app en reproducción.

Consulta Enfoque de audio en Android 12 y versiones posteriores para obtener más información.

Actualizaciones de MediaDrm

Para determinar si se requiere un componente de decodificador seguro con las API actuales de MediaDrm, debes seguir estos pasos:

  1. Crea un elemento MediaDrm.
  2. Abre una sesión para obtener un ID.
  3. Crea MediaCrypto con el ID de sesión.
  4. Llamar a MediaCrypto.requiresSecureDecoderComponent(mimeType)

Con los métodos nuevos requiresSecureDecoder(@NonNull String mime) y requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level), puedes determinarlo en cuanto crees MediaDrm.

Cámara

Extensiones de proveedores de Camera2

Muchos de nuestros socios fabricantes de dispositivos diseñaron efectos de cámara personalizados (como bokeh, HDR, modo nocturno y otros) que desean que las apps usen para crear experiencias diferenciadas en sus dispositivos. La biblioteca de CameraX ya admite esos efectos personalizados a través de un conjunto de extensiones de proveedores. En Android 12, estas mismas extensiones de proveedores ahora se exponen directamente en la plataforma.

Esta incorporación permite que las apps con implementaciones complejas de Camera2 aprovechen las extensiones sin tener que realizar cambios significativos en el código heredado. Las API de la extensión de Camera2 exponen exactamente el mismo conjunto de efectos que en CameraX, y estos ya son compatibles con muchos dispositivos diferentes, para que puedas usarlos sin ninguna configuración adicional.

Para obtener más información, consulta CameraExtensionCharacteristics.

Compatibilidad con sensores Quad Bayer de la cámara

En la actualidad, muchos dispositivos Android incluyen sensores de la cámara de ultra alta resolución, por lo general, con patrones Quad o Nona Baker, y estos ofrecen gran flexibilidad en términos de calidad de imagen y rendimiento con poca luz. En Android 12, se introducen API nuevas de plataforma que permiten que las apps de terceros aprovechen al máximo estos sensores versátiles. Las API nuevas admiten el comportamiento único de estos sensores y tienen en cuenta la posibilidad de que sean compatibles con diferentes configuraciones y combinaciones de transmisión cuando funcionan en modo de resolución completa o "resolución máxima" en comparación con el modo "predeterminado".

Imágenes y gráficos

Bríndales a las apps acceso directo a los seguimientos de tombstone

A partir de Android 12, puedes acceder a la tombstone de fallas por error en código nativo de la app como un búfer de protocolo mediante el método ApplicationExitInfo.getTraceInputStream(). El búfer de protocolo se serializa con este esquema. Anteriormente, la única manera de obtener acceso a esta información era mediante Android Debug Bridge (adb).

Para obtener más información, consulta Bríndales a las apps acceso directo a los seguimientos de tombstone.

Compatibilidad con imágenes AVIF

Android 12 introduce compatibilidad con imágenes que usan el formato de archivo de imagen AV1 (AVIF). AVIF es un formato de contenedor para imágenes y secuencias de imágenes codificadas con AV1. Aprovecha el contenido codificado en el marco de la compresión de video. Mejora notablemente la calidad de imagen para el mismo tamaño de archivo en comparación con formatos de imagen más antiguos, como JPEG. Si quieres obtener más información sobre las ventajas de este formato, consulta la entrada de blog de Jake Archibald.

Difuminación, filtros de color y otros efectos más sencillos

En Android 12, se agrega la clase RenderEffect nueva, que aplica efectos frecuentes de gráficos, como difuminación, filtros de color, efectos de sombreador de Android, etc., en objetos View y jerarquías de renderización. Los efectos pueden combinarse como efectos en cadena (que crean un efecto interno y externo) o efectos combinados. Es posible que los diferentes dispositivos Android no admitan la función debido a la potencia limitada de procesamiento.

También se pueden aplicar los efectos a la clase RenderNode subyacente para View mediante una llamada a View.setRenderEffect(RenderEffect).

En el siguiente ejemplo de código, se muestra cómo implementar RenderEffect:

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Decodificación de imágenes animadas nativas

En Android 12, se expandió la API ImageDecoder del NDK para decodificar todos los marcos y los datos de sincronización de las imágenes que usan formatos de archivo GIF y WebP animados. Cuando se introdujo en Android 11, esta API decodificaba solo la primera imagen de las animaciones en estos formatos.

Usa ImageDecoder en lugar de bibliotecas de terceros para reducir el tamaño del APK y aprovechar las actualizaciones futuras relacionadas con la seguridad y el rendimiento.

Para obtener más información sobre la API, consulta la referencia y el ejemplo en GitHub.

Conectividad

Mantén activas las apps complementarias

A fin de brindar compatibilidad con la necesidad de que las apps complementarias continúen ejecutándose para administrar el dispositivo, en Android 12, se introducen API que hacen lo siguiente:

  • Te permiten activar una app cuando un dispositivo complementario se encuentra dentro del alcance.
  • Garantizan que el proceso continuará ejecutándose mientras el dispositivo permanezca dentro del rango

Para usar las API, los dispositivos deben estar conectados mediante el administrador de dispositivo complementario. Para obtener más información, consulta CompanionDeviceManager.startObservingDevicePresence() y CompanionDeviceService.onDeviceAppeared().

Perfiles del administrador de dispositivo complementario

Diálogo de permisos que usa el perfil de un dispositivo complementario para solicitar varios permisos en una sola solicitud.

Las apps de socios en Android 12 (nivel de API 31) y versiones posteriores pueden usar perfiles de dispositivos complementarios cuando se conectan a un reloj. Usar un perfil simplifica el proceso de inscripción, ya que se agrupa en un solo paso el otorgamiento de un conjunto de permisos específicos del tipo de dispositivo.

Los permisos agrupados se le otorgan a la app complementaria una vez que se conecta el dispositivo y solo duran el tiempo en el que esté asociado. Borrar la app o quitar la asociación elimina los permisos.

Para obtener más información, consulta AssociationRequest.Builder.setDeviceProfile().

Mejoras en la estimación del ancho de banda

En Android 12, se mejoran las capacidades de estimación del ancho de banda que proporcionan getLinkDownstreamBandwidthKbps() y getLinkUpstreamBandwidthKbps() para Wi-Fi y conexión móvil. Ahora, los valores que se muestran representan la capacidad promedio y ponderada de procesamiento por proveedor o SSID Wi-Fi, tipo de red y nivel de señal, con la que cuenta el usuario en todo momento, en todas las aplicaciones del dispositivo. De esa manera, es posible mostrar una estimación más precisa y realista de la capacidad de procesamiento esperada, y proporcionar estimaciones sobre un inicio en frío de la aplicación, y se requieren menos ciclos en comparación con el uso de otros métodos de estimación de este tipo de capacidad.

Mejoras de Reconocimiento de Wi-Fi (NAN)

En Android 12, se agregaron algunas mejoras a Reconocimiento de Wi-Fi:

  • En dispositivos que ejecutan Android 12 (nivel de API 31) y versiones posteriores, puedes usar la devolución de llamada onServiceLost() para recibir una alerta cuando tu app pierda un servicio detectado, ya que el servicio dejó de funcionar o salió del rango de alcance.
  • Cambiará la forma en que están configuradas varias rutas de datos (rutas de datos NAN) para que resulten más eficientes. Las versiones anteriores usaban mensajería L2 para intercambiar información de pares de los iniciadores, lo que introdujo la latencia. En los dispositivos que ejecutan Android 12 y versiones posteriores, la respuesta (servidor) se puede configurar para aceptar cualquier par, es decir, no necesita conocer la información del iniciador de antemano. De esta manera, se acelera la aparición de la ruta de datos y se habilitan varios vínculos de punto a punto con una sola solicitud de red.
  • Para evitar que el marco de trabajo rechace las solicitudes de detección o conexión debido a la falta de recursos, en dispositivos que ejecutan Android 12 y versiones posteriores, puedes llamar a WifiAwareManager.getAvailableAwareResources(). El valor de retorno de este método te permite obtener la cantidad de rutas de datos, de sesiones de publicación y de sesiones de suscripción disponibles.

Conexión simultánea a Internet y entre pares

En los casos en que los dispositivos que se orientan a Android 12 (nivel de API 31) y versiones posteriores se ejecuten en dispositivos con compatibilidad de hardware, el uso de conexiones entre pares no desconectará la conexión Wi-Fi existente durante la creación de la conexión al dispositivo de intercambio de tráfico. Para verificar la compatibilidad de esta función, usa WifiManager.isMultiStaConcurrencySupported().

Habilita la pantalla apagada para pagos mediante NFC

En las apps que se orientan a Android 12 y versiones posteriores, puedes habilitar los pagos mediante NFC sin que la pantalla del dispositivo esté encendida. Para ello, configura requireDeviceScreenOn en false. Para obtener más información sobre los pagos mediante NFC con la pantalla apagada o bloqueada, consulta Pantalla apagada y comportamiento de pantalla de bloqueo.

Storage

Android 12 introduce las siguientes funciones para la administración del almacenamiento:

Funcionalidad principal

Actualizaciones automáticas de apps

En Android 12, se introduce el método setRequireUserAction() para las apps que usan la API de PackageInstaller. Este método permite que las apps instaladoras realicen actualizaciones de apps sin la necesidad de que el usuario confirme la acción.

Información sobre el chipset del dispositivo

En Android 12, se agregan dos constantes a android.os.Build que exponen la información sobre el modelo y el proveedor del chipset SoC mediante el SDK. Puedes recuperar esta información llamando a Build.SOC_MANUFACTURER y Build.SOC_MODEL, respectivamente.

Actualizaciones de las API principales de Java

En función de las solicitudes y la colaboración con desarrolladores, agregamos las siguientes bibliotecas principales en Android 12:

Clase API
java.lang.Deprecated
java.lang.Byte
java.lang.Short
java.lang.Math
java.lang.StrictMath
java.util.Set copyOf()
java.util.Map copyOf()
java.util.List copyOf()
java.time.Duration
java.time.LocalTime