检测屏幕截图 Android

Detect a screenshot Android

我最近几年编程 Android 我想知道一件事:如何检测用户何时截取屏幕截图?我希望当用户截屏时,我们移动到下一个 activity 。 我尝试了拦截事件的方法,但是有一个问题:当设备进入休眠状态时,例如,拦截了一个事件。有没有只拦截截屏事件或者忽略其他事件的解决方案?

感谢您的帮助!

没有直接的 Broadcast Intent 告诉你已经截图了。 有些人 here 讨论了这样做的可能选项(就像在 Snapchat 上所做的那样)。 一种可能的选择是使用 FileObserver.

这是我的技巧,可以在截图时收到通知。

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

}

在 Oneplus 2 和 Moto E 上测试。

更新:

这最终对我不起作用,我最终在屏幕截图类型的条目上使用了 ContentObserver。