La aplicación que estoy construyendo actualmente tiene el requisito de que la aplicación tiene que evitar que el sistema operativo tome una captura de pantalla de la aplicación cuando está siendo puesta en segundo plano por razones de seguridad. De esta manera, no podrá ver la última pantalla activa al cambiar de una aplicación a otra.
Estoy planeando poner esta funcionalidad en el método onPause de la clase de aplicación, pero primero necesito descubrir cómo puedo lograr esta funcionalidad.
Entonces, ¿hay alguien por ahí que tenga idea de cómo solucionar esto?
fuente
FLAG_SECURE
ha existido desde el principio, solo tenía un significado limitado hasta hace poco.FLAG_SECURE
no te defenderás de eso, ya que es un nivel demasiado bajo. Del mismo modo, si tomó su propia jerarquía de widgets y la hizoBitmap
retrocederCanvas
,FLAG_SECURE
probablemente no se defenderá de eso, ya que está tomando sus propias capturas de pantalla de sus propios widgets y, por lo tanto, presumiblemente quería los "seguros" allí.FLAG_SECURE
es para capturas de pantalla del sistema , como las miniaturas de tareas recientes.Tenga cuidado al usar WindowManager.LayoutParams.FLAG_SECURE, en algunos dispositivos (verificado en Samsung Galaxy ACE, por ejemplo, GT-S5830), esto hará que la vista sea desordenada. Parece un error específico de Samsung. Recomiendo lo siguiente:
Así es como se ve una pantalla codificada:
Sin embargo, esto funciona correctamente en los teléfonos ICS Samsung, por lo que supongo que el problema está aislado en los dispositivos Gingerbread (o anteriores).
fuente
La solución proporcionada por CommonsWare sigue siendo válida también en Lollipop.
Solo una nota, si desea continuar sin ver instantáneas en la lista reciente de toda la aplicación, TODAS las actividades implementadas deben especificar en el
onCreate()
método la marcagetWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
antessetContentView();
De lo contrario, una instantánea en la lista reciente mostrará la primera actividad sin la bandera si el usuario navegó por ella.
fuente
Aquí hay una solución para ocultar el contenido de una aplicación cubriéndola con una pantalla de inicio cuando la aplicación se pone en segundo plano. Esto no está utilizando la técnica FLAG_SECURE, simplemente anulo los métodos onPause y onResume de las pantallas y modifico la vista para mostrar una que cubra todo en la parte posterior.
https://stackoverflow.com/a/52976001/6686912
fuente
esto funcionó para mí, evita tomar capturas de pantalla y también cualquier aplicación de grabación incorporada o de terceros desde la pantalla de grabación.
fuente
Esto es un trabajo para mí después de agregar estas líneas en onCreate antes de establecerContentView de cada actividad.
fuente