检测Android的屏幕截图

Nac*_*ing 12 events android screenshot detect

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

谢谢您的帮助 !

Esc*_*ist 16

没有直接的广播意图告诉你截图已被拍摄.这里的一些人讨论了这样做的可能选择(就像在Snapchat上完成的那样).一种可能的选择是使用FileObserver.

  • 你在考虑Intents.你有一个所有这些的列表[这里](http://developer.android.com/reference/android/content/Intent.html#ACTION_PICK)但遗憾的是没有一个用于截屏检测.您应该查看reddit链接中提到的[FileObserver](http://developer.android.com/reference/android/os/FileObserver.html).我不能保证它有效,但想法是观察屏幕截图保存到的文件夹. (2认同)

Udi*_*hah 10

这是我的黑客在获取屏幕截图时收到通知.

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

}
Run Code Online (Sandbox Code Playgroud)

在Oneplus 2和Moto E上测试过

更新:

这最终不适合我,我最终在屏幕截图类型的条目上使用ContentObserver.

  • @MizAkita上面的代码总是不起作用.它会多次触发屏幕截图事件,因此不准确.我最终使用ContentObserver获取媒体文件并检测最后一个文件是否是截图,从而检测到它.如果你想在活动中使用这个东西,然后在onResume方法上部署它并停止检测活动生命周期的onPause方法,你想要使用上面的代码. (2认同)