Para crear una experiencia más estandarizada para detectar capturas de pantalla, Android 14 presenta una API de detección de capturas de pantalla que preserva la privacidad. Esta API permite que las apps registren devoluciones de llamada por actividad. Estas devoluciones de llamada se invocan y se notifica al usuario cuando este toma una captura de pantalla mientras esa actividad está visible.
Casos prácticos compatibles
En Android 14, la API del sistema solo detecta una captura de pantalla si el usuario realiza una combinación específica de presiones de botones de hardware. La API no detecta capturas de pantalla que se toman cuando se ejecutan comandos de prueba relacionados con capturas de pantalla, incluidos ADB, o dentro de pruebas de instrumentación que capturan el contenido actual de la pantalla del dispositivo.
Pasos de implementación
Para agregar la detección de capturas de pantalla, declara el nuevo DETECT_SCREEN_CAPTURE
permiso en el momento de la instalación:
<uses-permission android:name="android.permission.DETECT_SCREEN_CAPTURE" />
Luego, completa estos pasos para cada actividad de tu app en la que los usuarios puedan tomar capturas de pantalla:
Implementa una devolución de llamada anulando la función
onScreenCapture(). En esta devolución de llamada, tu app puede tomar medidas, como advertir a otro usuario que alguien tomó una captura de pantalla de una conversación de mensajería.Kotlin
val screenCaptureCallback = Activity.ScreenCaptureCallback { // Add logic to take action in your app. }
Java
final Activity.ScreenCaptureCallback screenCaptureCallback = new Activity.ScreenCaptureCallback() { @Override public void onScreenCaptured() { // Add logic to take action in your app. } };
En el método
onStart()de la actividad, registra la devolución de llamada de la captura de pantalla.Kotlin
override fun onStart() { super.onStart() // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(mainExecutor, screenCaptureCallback) }
Java
@Override protected void onStart() { super.onStart(); // Pass in the callback created in the previous step // and the intended callback executor (e.g. Activity's mainExecutor). registerScreenCaptureCallback(executor, screenCaptureCallback); }
En el método
onStop()de la actividad, anula el registro de la devolución de llamada de la captura de pantalla:Kotlin
override fun onStop() { super.onStop() unregisterScreenCaptureCallback(screenCaptureCallback) }
Java
@Override protected void onStop() { super.onStop(); unregisterScreenCaptureCallback(screenCaptureCallback); }
Controla la capacidad de tomar capturas de pantalla
Si no quieres que el contenido de la actividad de una app aparezca en capturas de pantalla o
en pantallas no seguras, configura la FLAG_SECURE marca de pantalla.
Kotlin
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
Java
activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);