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.