¿Cómo evitar la captura de pantalla o la grabadora de pantalla en Android?

En algunas situaciones, no queremos permitir que se tomen capturas de pantalla o grabaciones de pantalla de nuestra aplicación de Android. Aquí vamos a explicar cómo evitar que Android tome una captura de pantalla o grabe la pantalla cuando la aplicación pasa a segundo plano. Generalmente, cuando tomamos una captura de pantalla, veremos una notificación de Captura de pantalla en la barra de notificaciones y puede ver esa captura de pantalla en la aplicación Galería si hace clic en esa notificación. Y algunas de las aplicaciones de Android no podemos tomar una captura de pantalla de la pantalla visible debido a que la pantalla está protegida por el desarrollador. En esta situación, veremos el mensaje en la barra de notificaciones o en el Toastsobre la pantalla. Algunas de las aplicaciones de transferencia de pagos o aplicaciones que contienen cursos tienen esta función. En este artículo, vamos a crear un proyecto simple para demostrar cómo funciona esta función. qué

Implementación paso a paso

Paso 1: crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación.

Paso 2: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml y agregue el siguiente código a ese archivo. A continuación se muestra el código para el archivo activity_main.xml . Crearemos un TextView simple dentro del archivo activity_main.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Preventing App from Taking Screenshot"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        android:textStyle="bold"
        android:textSize="18sp"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
 
</androidx.constraintlayout.widget.ConstraintLayout>

Método 1

En el archivo MainActivity.java , simplemente agregue el siguiente código y evitará tomar una captura de pantalla en la aplicación de Android.

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

                                  WindowManager.LayoutParams.FLAG_SECURE);

A continuación se muestra el código completo del archivo MainActivity.java .

Java

import androidx.appcompat.app.AppCompatActivity;
 
import android.os.Bundle;
import android.view.WindowManager;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        // Adding this line will prevent taking screenshot in your app
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                             WindowManager.LayoutParams.FLAG_SECURE);
        
    }
}

Método 2

El método 1 solo es apropiado para una sola actividad, pero ¿cuál es la solución para bloquear la captura de pantalla para todas las actividades? Vamos a discutir esto en el método 2. En primer lugar, cree una clase de aplicación personalizada y agregue un registerActivityLifecycleCallbacks . Luego regístrelo en su manifiesto.

Paso 1: aquí escriba el código dado en el archivo MyApplicationContext.java

Java

import android.app.Activity;
import android.app.Application;
import android.content.Context;
import android.os.Bundle;
import android.view.WindowManager;
 
public class MyApplicationContext extends Application {
    private Context context;
    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        setupActivityListener();
    }
 
    private void setupActivityListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {
 
            }
            @Override
            public void onActivityPaused(Activity activity) {
 
            }
            @Override
            public void onActivityStopped(Activity activity) {
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }
}

Paso 2: Regístrelo en el archivo de manifiesto como el siguiente

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:name=".MyApplicationContext"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

Producción:

Aquí lo podéis ver claramente no permite hacer capturas de pantalla ni grabar pantallas ya que cuando intentamos hacer capturas de pantalla se pone negro.

Publicación traducida automáticamente

Artículo escrito por annianni y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *