Al igual que las versiones anteriores, Android 16 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican exclusivamente a las apps orientadas a Android 16 o versiones posteriores. Si tu app está orientada a Android 16 o versiones posteriores, debes modificarla para que admita estos comportamientos, cuando corresponda.
Asegúrate de revisar también la lista de cambios de comportamiento que afectan a todas las apps que se ejecutan en Android 16, independientemente de targetSdkVersion
de la app.
Experiencia del usuario y IU del sistema
Android 16 (nivel de API 36) incluye los siguientes cambios que tienen como objetivo crear una experiencia del usuario más intuitiva y coherente.
Desaparecerá la opción de inhabilitar el formato de borde a borde
Android 15 强制为以 Android 15(API 级别 35)为目标平台的应用启用边到边,但您的应用可以通过将 R.attr#windowOptOutEdgeToEdgeEnforcement
设为 true
来选择停用。对于以 Android 16 为目标平台的应用,R.attr#windowOptOutEdgeToEdgeEnforcement
已废弃并处于停用状态,并且您的应用无法选择停用全屏显示。
如需在 Android 16 Beta 版 2 中进行测试,请确保您的应用支持边到边,并移除对 R.attr#windowOptOutEdgeToEdgeEnforcement
的任何使用。如需支持边到边,请参阅 Compose 和 View 指南。如有疑虑,请在反馈页面上通过问题跟踪器与我们联系。
Migración o inhabilitación obligatoria para el gesto atrás predictivo
En el caso de las apps que se orientan a Android 16 o versiones posteriores y se ejecutan en un dispositivo con Android 16 o versiones posteriores, las animaciones del sistema de atrás predictivo (volver a la página principal, cambiar de tarea y cambiar de actividad) están habilitadas de forma predeterminada.
Además, no se llama a onBackPressed
y ya no se envía KeyEvent.KEYCODE_BACK
.
Si tu app intercepta el evento atrás y aún no migraste al gesto atrás predictivo, actualiza tu app para usar las APIs de navegación atrás compatibles o inhabilita temporalmente la función configurando el atributo android:enableOnBackInvokedCallback
como false
en la etiqueta <application>
o <activity>
del archivo AndroidManifest.xml
de tu app.
Las APIs de fuentes elegantes dejaron de estar disponibles y se inhabilitaron
Las apps orientadas a Android 15 (nivel de API 35) tienen el atributo elegantTextHeight
TextView
establecido en true
de forma predeterminada, lo que reemplaza la fuente compacta por una que es mucho más legible. Para anular este comportamiento, configura el atributo elegantTextHeight
en false
.
Android 16 da de baja el atributo elegantTextHeight
, y este se ignorará una vez que tu app se segmente para Android 16. Las "fuentes de la IU" que controlan estas APIs dejarán de estar disponibles, por lo que debes adaptar los diseños para garantizar una renderización de texto coherente y a prueba de futuro en árabe, lao, birmano, tamil, guyaratí, canarés, malabar, oriya, telugu o tailandés.

elegantTextHeight
para apps que se orientan a Android 14 (nivel de API 34) y versiones anteriores, o para apps que se orientan a Android 15 (nivel de API 35) que anularon el valor predeterminado configurando el atributo elegantTextHeight
en false
.
elegantTextHeight
para apps que se orientan a Android 16 o a Android 15 (nivel de API 35) que no anularon el valor predeterminado configurando el atributo elegantTextHeight
en false
.Funcionalidad principal
Android 16 (nivel de API 36) incluye los siguientes cambios que modifican o expanden varias funciones principales del sistema Android.
Optimización de la programación de trabajo con tarifa fija
Antes de orientarse a Android 16, cuando scheduleAtFixedRate
omitía la ejecución de una tarea debido a que estaba fuera de un ciclo de vida del proceso válido, todas las ejecuciones omitidas se ejecutaban de inmediato cuando la app regresaba a un ciclo de vida válido.
Cuando se orienta a Android 16, se ejecuta de inmediato una ejecución perdida de scheduleAtFixedRate
cuando la app vuelve a un ciclo de vida válido. Se espera que este cambio de comportamiento mejore el rendimiento de la app. Prueba este comportamiento en tu app para verificar si se ve afectada.
También puedes realizar pruebas con el marco de compatibilidad de apps y habilitar la marca de compatibilidad STPE_SKIP_MULTIPLE_MISSED_PERIODIC_TASKS
.
Factores de forma de los dispositivos
Android 16 (nivel de API 36) incluye los siguientes cambios para las apps cuando se muestran en dispositivos de pantalla grande.
Diseños adaptables
Ahora que las apps para Android se ejecutan en una variedad de dispositivos (como teléfonos, tablets, plegables, computadoras de escritorio, automóviles y TVs) y modos de ventana en pantallas grandes (como la pantalla dividida y la ventana de escritorio), los desarrolladores deben compilar apps para Android que se adapten a cualquier tamaño de pantalla y ventana, independientemente de la orientación del dispositivo. Los paradigmas como la restricción de la orientación y el cambio de tamaño son demasiado restrictivos en el mundo multidispositivo actual.
Ignora las restricciones de orientación, cambio de tamaño y relación de aspecto
En el caso de las apps que se orientan a Android 16, Android 16 incluye cambios en la forma en que el sistema administra las restricciones de orientación, cambio de tamaño y relación de aspecto. En pantallas con un ancho más pequeño >= 600 dp, ya no se aplican las restricciones. Las apps también ocupan toda la ventana de visualización, independientemente de la relación de aspecto o la orientación preferida del usuario, y no se usa el formato pillarbox.
Este cambio introduce un nuevo comportamiento estándar de la plataforma. Android se está moviendo hacia un modelo en el que se espera que las apps se adapten a varias orientaciones, tamaños de pantalla y relaciones de aspecto. Las restricciones, como la orientación fija o el cambio de tamaño limitado, dificultan la adaptabilidad de la app, por lo que te recomendamos que la hagas adaptable para ofrecer la mejor experiencia del usuario posible.
También puedes probar este comportamiento con el [marco de compatibilidad de apps][a16-kilo-14] y habilitando la marca de compatibilidad UNIVERSAL_RESIZABLE_BY_DEFAULT
.
Cambios rotundos comunes
Si ignoras las restricciones de orientación, cambio de tamaño y relación de aspecto, es posible que se vea afectada la IU de tu app en algunos dispositivos, en especial los elementos diseñados para diseños pequeños bloqueados en orientación vertical, por ejemplo, problemas como diseños estirados y animaciones y componentes fuera de la pantalla. Cualquier suposición sobre la relación de aspecto o la orientación puede causar problemas visuales en tu app. Obtén más información para evitarlos y mejorar el comportamiento adaptable de tu app.
Permitir la rotación del dispositivo genera más recreaciones de actividades, lo que puede provocar la pérdida del estado del usuario si no se conserva correctamente. Obtén información para guardar correctamente el estado de la IU en Cómo guardar estados de la IU.
Detalles de implementación
Los siguientes atributos de manifiesto y APIs de tiempo de ejecución se ignoran en los dispositivos de pantalla grande en los modos de pantalla completa y multiventana:
screenOrientation
resizableActivity
minAspectRatio
maxAspectRatio
setRequestedOrientation()
getRequestedOrientation()
Se ignoran los siguientes valores para screenOrientation
, setRequestedOrientation()
y getRequestedOrientation()
:
portrait
reversePortrait
sensorPortrait
userPortrait
landscape
reverseLandscape
sensorLandscape
userLandscape
En cuanto al cambio de tamaño de la pantalla, android:resizeableActivity="false"
, android:minAspectRatio
y android:maxAspectRatio
no tienen efecto.
En el caso de las apps orientadas a Android 16, la orientación, el cambio de tamaño y las restricciones de relación de aspecto de la app se ignoran en pantallas grandes de forma predeterminada, pero todas las apps que no están completamente listas pueden anular temporalmente este comportamiento inhabilitando la opción (lo que genera el comportamiento anterior de colocarse en el modo de compatibilidad).
Excepciones
Las restricciones de orientación, cambio de tamaño y relación de aspecto de Android 16 no se aplican en las siguientes situaciones:
- Juegos (según la marca
android:appCategory
) - Los usuarios que habilitan de forma explícita el comportamiento predeterminado de la app en la configuración de la relación de aspecto del dispositivo
- Pantallas más pequeñas que
sw600dp
Inhabilitar temporalmente
Para inhabilitar una actividad específica, declara la propiedad del manifiesto PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY
:
<activity ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
...
</activity>
Si demasiadas partes de tu app no están preparadas para Android 16, puedes inhabilitar la función por completo aplicando la misma propiedad a nivel de la aplicación:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
Salud y fitness
Android 16 (nivel de API 36) incluye los siguientes cambios relacionados con los datos de salud y fitness.
Permisos de salud y fitness
En el caso de las apps orientadas a Android 16 o versiones posteriores, los permisos de BODY_SENSORS
están en transición a los permisos detallados de android.permissions.health
que también usa Health Connect. Las APIs que antes necesitaban BODY_SENSORS
o BODY_SENSORS_BACKGROUND
ahora requieren el permiso android.permissions.health
correspondiente. Esto afecta los siguientes tipos de datos, APIs y tipos de servicios en primer plano:
HEART_RATE_BPM
de los Servicios de salud de WearSensor.TYPE_HEART_RATE
desde el Administrador de sensores de AndroidheartRateAccuracy
yheartRateBpm
de WearProtoLayout
FOREGROUND_SERVICE_TYPE_HEALTH
, donde se necesita el permisoandroid.permission.health
correspondiente en lugar deBODY_SENSORS
Si tu app usa estas APIs, ahora debe solicitar los permisos detallados correspondientes:
- Para el monitoreo en uso de la frecuencia cardíaca, la SpO2 o la temperatura de la piel, solicita el permiso detallado en
android.permissions.health
, comoREAD_HEART_RATE
en lugar deBODY_SENSORS
. - Para el acceso a los sensores en segundo plano, solicita
READ_HEALTH_DATA_IN_BACKGROUND
en lugar deBODY_SENSORS_BACKGROUND
.
Estos permisos son los mismos que protegen el acceso a la lectura de datos de Health Connect, el almacén de datos de Android para datos de salud, fitness y bienestar.
Apps para dispositivos móviles
Las apps para dispositivos móviles que migren para usar READ_HEART_RATE
y otros permisos detallados también deben declarar una actividad para mostrar la política de privacidad de la app. Este es el mismo requisito que Health Connect.
Conectividad
Android 16 (nivel de API 36) incluye los siguientes cambios en la pila de Bluetooth para mejorar la conectividad con dispositivos periféricos.
Nuevos intents para controlar la pérdida de vinculación y los cambios de encriptación
作为改进了对键值对丢失的处理的一部分,Android 16 还引入了 2 个新 intent,以便应用更好地了解键值对丢失和加密更改。
以 Android 16 为目标平台的应用现在可以:
- 在检测到远程键盘连接丢失时接收
ACTION_KEY_MISSING
intent,以便提供更具信息量的用户反馈并采取适当的措施。 - 每当链接的加密状态发生变化时,都会收到
ACTION_ENCRYPTION_CHANGE
intent。这包括加密状态更改、加密算法更改和加密密钥大小更改。如果应用在稍后收到ACTION_ENCRYPTION_CHANGE
intent 时成功加密了链接,则必须将该绑定视为已恢复。
如果您的应用目前使用自定义机制来处理键盘键失效,请迁移到新的 intent ACTION_KEY_MISSING
以检测和管理键盘键失效事件。我们建议您的应用在发起设备忘记和重新配对之前,引导用户确认远程设备是否在有效范围内。
此外,如果设备在收到 ACTION_KEY_MISSING
intent 后断开连接,您的应用应注意重新连接到设备,因为该设备可能已不再与系统绑定。
Seguridad
Android 16 (nivel de API 36) incluye los siguientes cambios de seguridad.
Bloqueo de versión de MediaStore
En el caso de las apps orientadas a Android 16 o versiones posteriores, MediaStore#getVersion()
ahora será único para cada app. Esto elimina las propiedades de identificación de la cadena de versión para evitar el abuso y el uso de técnicas de creación de huellas digitales. Las apps no deben hacer suposiciones sobre el formato de esta versión. Las apps ya deberían controlar los cambios de versión cuando usan esta API y, en la mayoría de los casos, no deberían necesitar cambiar su comportamiento actual, a menos que el desarrollador haya intentado inferir información adicional que esté más allá del alcance previsto de esta API.