Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detect a screenshot Android

I program in recent years to Android and I wonder something : How to detect when user take a screenshot ? I want that when the user takes a screenshot , we move to the next activity . I tried the method of intercepting an event but there is a problem : when the device goes into sleep , for example, an event is intercepted . Do you have a solution for intercepts only the event of screenshot or ignore other event?

Thank you for your help !

like image 344
Nachding Avatar asked Apr 09 '15 07:04

Nachding


2 Answers

There is no direct Broadcast Intent to tell you that a screenshot has been taken. Some people here discuss possible options to do so ( like it's done on Snapchat ). One possible option would be to use FileObserver.

like image 194
EscapeArtist Avatar answered Oct 08 '22 19:10

EscapeArtist


Here is my hack to get notified when a screenshot is taken.

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

}

Tested on Oneplus 2 and Moto E.

Update:

This finally didn't work for me and i ended up using a ContentObserver on screenshot type of entries.

like image 36
Udit Shah Avatar answered Oct 08 '22 17:10

Udit Shah