Al igual que las versiones anteriores, Android 13 incluye cambios de comportamiento que podrían afectar tu app. Los siguientes cambios se aplican exclusivamente a las apps orientadas a Android 13 o versiones posteriores. Si tu app está orientada a Android 13 o versiones posteriores, debes modificarla para que admita estos comportamientos correctamente, cuando corresponda.
Asegúrate de revisar también la lista de cambios en el comportamiento que afectan a todas las apps que se ejecutan en Android 13.
Privacidad
El permiso de notificación afecta la apariencia del servicio en primer plano
Si el usuario rechaza este permiso, aún podrá ver los avisos relacionados con estos servicios en primer plano en el Administrador de tareas de servicios en primer plano (FGS), pero no las verá en el panel lateral de notificaciones.
Nuevo permiso de tiempo de ejecución para dispositivos de Wi-Fi cercanos
En versiones anteriores de Android, el usuario debe otorgarle el permiso ACCESS_FINE_LOCATION
a tu app para que complete varios casos de uso frecuentes de Wi-Fi que se relacionan con los hotspots, las conexiones Wi-Fi directas, Wi-Fi RTT y mucho más.
Como es difícil para los usuarios asociar permisos de ubicación con la funcionalidad de Wi-Fi, Android 13 introduce un nuevo permiso de tiempo de ejecución en el grupo de permisos NEARBY_DEVICES
para apps que administran las conexiones de un dispositivo a puntos de acceso cercanos a través de Wi-Fi. Este permiso, NEARBY_WIFI_DEVICES
, completa estos casos de uso de Wi-Fi.
Siempre que tu app no obtenga información de la ubicación física de las API de Wi-Fi, solicita NEARBY_WIFI_DEVICES
en lugar de ACCESS_FINE_LOCATION
cuando orientes tu app a Android 13 o versiones posteriores y uses API de Wi-Fi. Este proceso es similar al que realizas en Android 12 (nivel de API 31) y versiones posteriores, cuando declaras que la información del dispositivo Bluetooth nunca se usa para la ubicación.
Obtén más información sobre el permiso para dispositivos de Wi-Fi cercanos.
El uso de sensores corporales en segundo plano requiere un permiso nuevo
Android 13 introduce el concepto de acceso "durante el uso" para los sensores corporales, como el ritmo cardíaco, la temperatura y el porcentaje de oxígeno en sangre. Este modelo de acceso es muy similar al que introdujo el sistema para la ubicación en Android 10 (nivel de API 29).
Si tu app se orienta a Android 13 y requiere acceso a la información del sensor corporal mientras se ejecuta en segundo plano, debes declarar el nuevo permiso BODY_SENSORS_BACKGROUND
además del permiso existente BODY_SENSORS
.
Seguridad
Los filtros de intents bloquean los intents que no coinciden
Cuando tu app envía un intent a un componente exportado de otra app orientada a Android 13 o versiones posteriores, se entrega ese intent solo si coincide con un elemento <intent-filter>
en la app receptora. En otras palabras, el sistema bloquea todos los intents que no coinciden, excepto los siguientes:
- Intents enviados a los componentes de otras apps en los que esos componentes no declaran ningún filtro de intents
- Intents enviados a otros componentes de tu app
- Intents enviados desde el sistema
- Intents enviados desde un usuario con privilegios a nivel de raíz
Exportación más segura de receptores registrados en el contexto
Para que los receptores de tiempo de ejecución sean más seguros, Android 13 te permite especificar si un receptor de emisión específico de tu app se debe exportar a otras apps y ser visible para ellas en el dispositivo. Si se exporta el receptor de emisión, otras apps podrían enviar transmisiones sin protección a tu app. Esta configuración de exportación, que está disponible en apps orientadas a Android 13 o versiones posteriores, puede ayudar a evitar una de las principales fuentes de vulnerabilidades de las apps.
En versiones anteriores de Android, cualquier app del dispositivo podía enviar una transmisión sin protección a un receptor registrado dinámicamente, a menos que ese receptor estuviera protegido por un permiso de firma.
Para implementar esta medida de mejora de la seguridad, haz lo siguiente:
- Habilita el cambio de marco de compatibilidad de
DYNAMIC_RECEIVER_EXPLICIT_EXPORT_REQUIRED
. En cada uno de los receptores de emisión de tu app, indica de forma explícita si otras apps deben poder enviarle transmisiones, como se muestra en el siguiente fragmento de código:
Kotlin
// This broadcast receiver should be able to receive broadcasts from other apps. // This option causes the same behavior as setting the broadcast receiver's // "exported" attribute to true in your app's manifest. context.registerReceiver(sharedBroadcastReceiver, intentFilter, RECEIVER_EXPORTED) // For app safety reasons, this private broadcast receiver should **NOT** // be able to receive broadcasts from other apps. context.registerReceiver(privateBroadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED)
Java
// This broadcast receiver should be able to receive broadcasts from other apps. // This option causes the same behavior as setting the broadcast receiver's // "exported" attribute to true in your app's manifest. context.registerReceiver(sharedBroadcastReceiver, intentFilter, RECEIVER_EXPORTED); // For app safety reasons, this private broadcast receiver should **NOT** // be able to receive broadcasts from other apps. context.registerReceiver(privateBroadcastReceiver, intentFilter, RECEIVER_NOT_EXPORTED);
Rendimiento y batería
Uso de recursos de batería
Si el usuario coloca la app en estado "restringido" para el uso de batería en segundo plano mientras tu app se orienta a Android 13, el sistema aplica varias limitaciones relacionadas con las transmisiones.
Obtén más información sobre las limitaciones nuevas para el uso restringido de batería en segundo plano en la página que describe las funciones de uso de recursos de batería que se introducen en Android 13.