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 !
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
.
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.