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 APIs nuevas, modificadas y quitadas, lee el informe de diferencias de APIs. Para obtener detalles sobre las nuevas APIs, consulta la referencia de la API de Android. Las nuevas APIs están destacadas para mayor visibilidad. Además, para conocer las áreas en las que los cambios de la plataforma podrían afectar a tus apps, asegúrate de revisar los cambios en el comportamiento de Android 12 para apps orientadas a Android 12 y para 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.
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 objetivo de crear respuestas táctiles informativas para eventos de la IU, efectos envolventes y agradables para videojuegos, y tecnología táctil que genera 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](https://developer.android.google.cn/static/images/about/versions/12/appsearch.png?authuser=7&hl=es)
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 de Game Mode y las intervenciones de Game Mode te permiten optimizar el juego priorizando características, como el rendimiento o la duración de batería, según la configuración del usuario o de juegos específicos.
Para obtener más información, consulta Game Mode.
Recomendaciones y mejoras de pantalla en pantalla (PIP)
En Android 12, se introducen las siguientes mejoras para el modo de PIP:
Compatibilidad con los nuevos gestos de PIP
Android 12 ahora admite gestos de almacenamiento temporal y pellizcar para acercar en la ventana de PiP:
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.
Nuevas funciones recomendadas que admiten una experiencia de transición de PIP mejorada
Android 12 agregó mejoras estéticas significativas a las transiciones animadas entre las ventanas de pantalla completa y de PIP. Te recomendamos que implementes todos los cambios aplicables. Una vez que lo hagas, se ajustarán automáticamente a pantallas grandes, como dispositivos plegables y tablets, sin ningún trabajo adicional necesario.
Estas funciones son las siguientes:
Una nueva marca de API para una transición más fluida al modo de PIP con 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.Animaciones más fluidas al entrar y salir del modo de PIP
Ahora se vuelve a usar la marca
SourceRectHint
para implementar animaciones más fluidas cuando se ingresa al modo de PIP y se sale de él.Una nueva marca de API para inhabilitar el cambio de tamaño fluido de contenido que no sea de 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.
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 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:
- Para determinar el grupo de permisos en el que el sistema asignó un permiso que define la plataforma, llama a
getGroupOfPlatformPermission()
. - Para determinar los permisos que define la plataforma y que el sistema asignó en un grupo particular de permisos, llama a
getPlatformPermissionsForGroup()
.
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)
![](https://developer.android.google.cn/static/images/about/versions/12/phishing-detection.png?authuser=7&hl=es)
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. 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 (phishing) puede advertirles a los usuarios los siguientes riesgos posibles:
- 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.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:
- Crea un elemento
MediaDrm
. - Abre una sesión para obtener un ID.
- Crea
MediaCrypto
con el ID de sesión. - 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 crearon extensiones de cámara personalizadas, como Bokeh, HDR, Modo nocturno y otras, que quieren que las apps usen para crear experiencias diferenciadas en sus dispositivos. La biblioteca de CameraX ya admite estas extensiones personalizadas del proveedor. En Android 12, estas extensiones de proveedores ahora se exponen directamente en la plataforma.
Esta incorporación ayuda a las apps que tienen implementaciones complejas de Camera2
a aprovechar las extensiones de proveedores sin tener que realizar cambios significativos en el código heredado. Las APIs de la extensión de Camera2 exponen exactamente el mismo conjunto de extensiones que en CameraX, y esas ya son compatibles con muchos dispositivos diferentes, por lo que puedes usarlas 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
![](https://developer.android.google.cn/static/images/about/versions/12/companion-device-profile.png?authuser=7&hl=es)
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.
Almacenamiento
Android 12 introduce las siguientes funciones para la administración del almacenamiento:
- Compatibilidad con almacenamiento de contenido multimedia para
MediaDocumentsProvider
cuando la app recupera un URI de contenido multimedia equivalente a un URI determinado del proveedor de documentos - Un directorio para las grabaciones de voz
- El permiso
MANAGE_MEDIA
, que permite que una app realice operaciones de administración de contenido multimedia sin mostrarle al usuario un diálogo de confirmación para cada operación - Las apps que tienen los permisos
MANAGE_EXTERNAL_STORAGE
yQUERY_ALL_PACKAGES
, como las de administración de archivos, pueden invocar una actividad personalizada para administrar el espacio de almacenamiento de otra app, siempre que esta otra cree una actividad personalizada
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 | APIs |
---|---|
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
|