I programa en los últimos años para Android y me pregunto algo : ¿Cómo detectar cuando el usuario tome una captura de pantalla ? Quiero que cuando el usuario toma una captura de pantalla , pasemos a la siguiente actividad .
He probado el método de intercepción de un evento, pero hay un problema : cuando el dispositivo entra en el sueño , por ejemplo, un evento es interceptado . ¿Tiene una solución para intercepta sólo el evento de captura de pantalla o hacer caso omiso de otros eventos?

Gracias por su ayuda !

OriginalEl autor Nachding | 2015-04-09

2 Comentarios

  1. 12

    No existe Difusión de la Intención de decirle que una imagen ha sido tomada.
    Algunas personas aquí discutir las posibles opciones para hacerlo ( como se hace en Snapchat ).
    Una posible opción sería el uso de FileObserver.

    He probado este método de intercepción de un evento, pero hay un problema : cuando el dispositivo entra en el sueño , por ejemplo, un evento es interceptado . ¿Tiene una solución para intercepta sólo el evento de captura de pantalla o hacer caso omiso de otros eventos?
    Usted está pensando acerca de las Intenciones. Usted tiene una lista de todos ellos aquí, Pero por desgracia no hay uno para la captura de pantalla de la detección. Usted debe mirar en FileObserver como se mencionó en el link de reddit. Yo no puedo garantía de que funciona, pero la idea sería observar la carpeta donde las capturas de pantalla se guardan en.

    OriginalEl autor EscapeArtist

  2. 9

    Aquí está mi hack para recibir una notificación cuando la pantalla.

    public void detectScreenShotService(final Activity activity){
    
       final Handler h = new Handler();
       final int delay = 3000; //milliseconds
       final ActivityManager am=(ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);
    
        h.postDelayed(new Runnable(){
            public void run(){
    
                List<ActivityManager.RunningServiceInfo> rs=am.getRunningServices(200);
    
                for(ActivityManager.RunningServiceInfo ar:rs){
                    if(ar.process.equals("com.android.systemui:screenshot")){
                        Toast.makeText(activity,"Screenshot captured!!",Toast.LENGTH_LONG).show();
                    }
                }
                h.postDelayed(this, delay);
            }
        }, delay);
    
    }

    Probado en Oneplus 2 y Moto E.

    Actualización:

    Esto finalmente no funcionó para mí y terminé con un ContentObserver en la captura de pantalla tipo de entradas.

    ur código funciona, pero cómo obtener la ruta de acceso de la captura de pantalla ?
    Teóricamente, lo que se puede hacer es poner un vigilante en la carpeta capturas de pantalla y cada vez que este evento se desencadena, obtener la lista de archivos y ver la última que se ha creado el archivo, que debe ser su imagen de archivo.
    ¿Dónde se coloca este código @UditShah
    El código anterior no funciona siempre. Se desencadena capturas de pantalla evento varias veces y así es inexacta. Terminé usando ContentObserver para los archivos de medios y detectar si el último archivo de captura de pantalla o no y por lo tanto su detección. En caso que usted desee utilizar el código de arriba, si quieres usar esta cosa en una actividad, luego de implementar el método onResume y detener su detección método onPause de la actividad del ciclo de vida.
    Sí, yo confirme el código de la respuesta obras de 1/4 del tiempo

    OriginalEl autor Udit Shah

Dejar respuesta

Please enter your comment!
Please enter your name here