Detecta cuando los usuarios toman capturas de pantalla del dispositivo

Aparece el mensaje "La aplicación de pagos detectó esta captura de pantalla".
Figura 1: Ejemplo del mensaje de aviso proporcionado por el sistema que aparece cuando el usuario toma una captura de pantalla de una aplicación que admite la API de Screenshot Detection.

Para crear una experiencia más estandarizada en la detección de capturas de pantalla, Android 14 introduce una detección de capturas de pantalla que preserva la privacidad en la API de Cloud. Esta API permite que las apps registren devoluciones de llamada por actividad. Estos se invocan devoluciones de llamada y se notifica al usuario cuando toma un captura de pantalla mientras la actividad está visible.

Casos de uso compatibles

En Android 14, la API del sistema solo detecta una captura de pantalla si el usuario realiza una una combinación específica de pulsaciones de botones de hardware. La API no detecta capturas de pantalla que se toman cuando se ejecutan comandos de prueba relacionados con las capturas de pantalla incluidas ADB o dentro de las pruebas de instrumentación que capturan la banda ancha del dispositivo contenido de la pantalla actual.

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:

  1. Anula la función onScreenCapture() para implementar una devolución de llamada. En este o una devolución de llamada, la 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.
            }
        };
    
  2. En el método onStart() de la actividad, registra la devolución de llamada de 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);
    }
    
  3. En el método onStop() de la actividad, cancela el registro de la devolución de llamada de 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. en pantallas no seguras, configura la marca de visualización FLAG_SECURE.

Kotlin

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)

Java

activity.getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);