toman - Cómo evitar la captura de pantalla en Android
screenshot snapchat historia (11)
De acuerdo con esta
guía oficial
, puede agregar
WindowManager.LayoutParams.FLAG_SECURE
a su diseño de ventana y no permitirá capturas de pantalla.
¿Es posible evitar la grabación de pantalla en la aplicación de Android?
Me gustaría desarrollar una aplicación segura de Android. En eso necesito detectar el software de grabación de pantalla que se está ejecutando en segundo plano y matarlos. He usado SECURE FLAG para evitar capturas de pantalla. Pero no sé si también es posible evitar la captura de video de la pantalla de Android. Avíseme cómo evitar la captura de pantalla (video / capturas de pantalla).
Para deshabilitar la captura de pantalla:
Agregue la siguiente línea de código en el método
onCreate()
:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
Para habilitar la captura de pantalla:
Busque
LayoutParams.FLAG_SECURE
y elimine la línea de código.
Para usuarios de Java
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
Para usuarios de kotlin
window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
Parece que sabes cómo deshabilitar las capturas de pantalla de tu aplicación y hay otras respuestas que te ayudan en eso. Pero intentaré darle información importante que nadie le está dando.
1) No puede tener una aplicación que sea 100% segura al tomar capturas de pantalla (foto / video). No hay una forma oficial de tomar capturas de pantalla en Android. Si una aplicación está grabando pantallas, entonces debe estar usando algunos métodos no compatibles (ya sea rootear o usar el SDK).
Hay muy poco margen para bloquear una aplicación si está utilizando el acceso raíz a las pantallas de grabación.
2) Nadie mencionó este problema aquí, pero tenga mucho cuidado al usar
WindowManager.LayoutParams.FLAG_SECURE
.
Se ha verificado en muchos dispositivos (como en Samsung Galaxy ACE, por ejemplo, GT-S5830), que esto hace que toda la vista sea desordenada.
Me gusta esto,
Por favor ponga un cheque como este,
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}
Funciona perfectamente en dispositivos ICS, así que no hay problema.
3) También descubrí que incluso en dispositivos más nuevos como Android 4.3, esto causa problemas de animación cuando se gira la pantalla. Por favor check este informe de error.
Prueba esto:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Puede configurar su aplicación como propietario del dispositivo / perfil y llamar a
setScreenCaptureDisabled()
.
Desde los
docs
, esta API hace lo siguiente:
public void setScreenCaptureDisabled (ComponentName admin, boolean disabled) Agregado en API nivel 21
Llamado por un propietario de dispositivo / perfil para establecer si la captura de pantalla está deshabilitada. La desactivación de la captura de pantalla también evita que el contenido se muestre en dispositivos de visualización que no tienen una salida de video segura. Consulte FLAG_SECURE para obtener más detalles sobre superficies seguras y pantallas seguras.
El administrador del dispositivo de llamada debe ser el propietario de un dispositivo o perfil. Si no es así, se lanzará una excepción de seguridad. Parámetros admin Con qué DeviceAdminReceiver está asociada esta solicitud. disabled Si la captura de pantalla está desactivada o no.
Alternativamente, puede convertirse en una aplicación asociada MDM (Mobile Device Management). OEM ofrece API adicionales a sus aplicaciones asociadas MDM para controlar el dispositivo. Por ejemplo, Samsung proporciona API para controlar la grabación de pantalla en el dispositivo a sus socios MDM.
Actualmente, esta es la única forma en que puede imponer restricciones de captura de pantalla.
Solo agrega esta línea:
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Antes de su método
setContentView()
.
Utilicé esta solución para permitir la captura de pantalla manual en la aplicación y no permitir la captura de pantalla cuando la aplicación pasa a segundo plano, espero que ayude.
@Override
protected void onResume() {
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
super.onResume();
}
@Override
protected void onPause() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
super.onPause();
}
Vi todas las respuestas que son apropiadas solo para una sola actividad, pero existe mi solución que bloqueará la captura de pantalla para todas las actividades sin agregar ningún código a la actividad.
En primer lugar, cree una clase de Aplicación personalizada y agregue un
registerActivityLifecycleCallbacks
Luego regístrelo en su manifiesto.
MyApplicationContext.class
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) {
}
});
}
}
Manifiesto
<application
android:name=".MyApplicationContext"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
Voy a decir que no es posible evitar por completo la captura de pantalla / video de cualquier aplicación de Android a través de medios compatibles. Pero si solo desea bloquearlo para dispositivos Android normales , la BANDERA SEGURA es sustancial.
1) El indicador de seguridad bloquea tanto la captura de pantalla normal como la captura de video.
También la documentación en este enlace dice que
Indicador de ventana: trata el contenido de la ventana como seguro, evitando que aparezca en capturas de pantalla o se vea en pantallas no seguras.
La solución anterior seguramente evitará que las aplicaciones capturen video de su aplicación
Mira la respuesta here .
2) Existen medios alternativos para capturar el contenido de la pantalla.
Es posible capturar la pantalla de otra aplicación en un dispositivo rooteado o mediante el SDK,
que ofrecen poca o ninguna posibilidad de que lo bloquees o recibas una notificación al respecto.
Por ejemplo: existe un software para duplicar la pantalla de su teléfono a su computadora a través del SDK y, por lo tanto, su aplicación podría utilizar el software de captura de pantalla.
Mira la respuesta here .
sobre la captura de pantalla de la foto, FLAG_SECURE no funciona dispositivo rooteado.
pero si monitorea el archivo de captura de pantalla, puede evitar obtener el archivo original.
prueba este.
1. captura de pantalla de monitoreo (monitor de archivo) con servicio remoto de Android
2. eliminar la imagen original de la captura de pantalla.
3. Entregue la instancia de mapa de bits para que pueda modificarla.