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 !
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
.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With