web-dev-qa-db-fra.com

Détecter une capture d'écran Android

J'ai programmé ces dernières années pour Android et je me demande quelque chose: comment détecter quand l'utilisateur fait une capture d'écran? Je veux que lorsque l'utilisateur prend une capture d'écran, nous passons à l'activité suivante. J'ai essayé le méthode d'interception d'un événement mais il y a un problème: lorsque l'appareil se met en veille, par exemple, un événement est intercepté. Avez-vous une solution pour intercepter uniquement l'événement de capture d'écran ou ignorer un autre événement?

Merci de votre aide !

13
Nachding

Aucune intention de diffusion directe ne vous indique qu'une capture d'écran a été prise. Certaines personnes ici discutent des options possibles pour le faire (comme cela se fait sur Snapchat). Une option possible serait d'utiliser FileObserver.

17
EscapeArtist

Voici mon hack pour être averti lorsqu'une capture d'écran est prise.

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);

}

Testé sur Oneplus 2 et Moto E.

Mettre à jour:

Cela n'a finalement pas fonctionné pour moi et j'ai fini par utiliser un ContentObserver sur les entrées de type capture d'écran.

10
Udit Shah