2011-07-20 25 views
13

Me preguntaba si hay una manera de detectar a través de algún método de devolución de llamada "onXXXXX" o transmisión recibida si algún otro proceso está a punto de tomar una captura de pantalla de la pantalla de mi aplicación. Por ejemplo, si las herramientas de SDK o alguna otra aplicación de captura de pantalla realiza una "Captura de pantalla", me gustaría recibir una notificación y luego decidir si debo permitir o no la captura de pantalla.prevenir la captura de pantalla en las aplicaciones de Android

Si esto no es posible, ¿hay alguna manera de bloquear la pantalla para que ningún otro proceso pueda capturar la pantalla?

Respuesta

5

Hay no supported method para tomar una captura de pantalla de otra aplicación en Android. Las únicas formas implican enrutar o usar el SDK, que ofrecen poca o ninguna posibilidad de que usted bloquee o reciba notificación de ello. Si otra aplicación toma su captura de pantalla, está usando de manera predeterminada los métodos no compatibles y probablemente pueda hacer lo que le plazca.

Me gustaría aclarar que no estoy implicando que no deba usar ningún método disponible para proteger su aplicación. Solo te estoy diciendo que probablemente sea imposible hacerlo sin usar métodos no admitidos, y que incluso si los usas, es posible que no estés 100% seguro contra capturas de pantalla.

+0

En realidad, existe el inicio de dicha capacidad en las fuentes oficiales, y es utilizable en una serie de dispositivos de proveedores por aplicaciones no root. –

+0

Aún así, estos no son oficiales hasta que estén en la documentación de la API. Simplemente digo que, debido a que actualmente no se admite ningún método para tomar una captura de pantalla o directamente desde el SDK, es muy probable que no haya métodos oficiales para interactuar con él. –

+0

¿Qué pasa con 'View.getDrawingCache (boolean autoScale)'? El doc lee: _Returna el mapa de bits en el que se ve el dibujo de esta vista._ – iDroid

18

Esto funcionó para mí en un Samsung Tab 2 7"

Usando the following approach, simplemente agregar la FLAG_SECURE a las Banderas de ventana

public class FlagSecureTestActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

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

    setContentView(R.layout.main); 
    } 
} 

con la advertencia de que puede que tenga que cambiar

LayoutParams 

a

WindowManager.LayoutParams 
+0

Esto funciona y debería ser la respuesta para la mayoría de los desarrolladores. –

+0

no funciona en 7.0 con modo apaisado .. –

Cuestiones relacionadas