当我的应用程序在前台时,是否可以截取截屏事件

时间:2014-05-21 13:49:58

标签: android screenshot

当我的应用程序在前台时,是否可以拦截截屏事件(或为其创建一个侦听器)?我想在通过vol down + power key拍摄屏幕截图时执行一些自己的代码。

2 个答案:

答案 0 :(得分:2)

不,抱歉,您无法控制屏幕截图。如果您的目标是阻止您的应用获取屏幕截图(例如,出于安全原因),请使用FLAG_SECURE

public class FlagSecureTestActivity extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getWindow().setFlags(LayoutParams.FLAG_SECURE,
                         LayoutParams.FLAG_SECURE);

    setContentView(R.layout.main);
  }
}

答案 1 :(得分:1)

执行此任务的方法是在屏幕截图目录中添加文件观察器。编写下面的示例代码以观察文件路径 屏幕截图文件观察者     package com.example.main;

import android.os.Environment;
import android.os.FileObserver;
import android.util.Log;

public class ScreenshotObserver extends FileObserver {
        private static final String PATH = Environment.getExternalStorageDirectory().toString() + "/Pictures/Screenshots";
        private static final String TAG = "ScreenshotObserver";

        private ScreenshotListener listener;
        private String mLastTakenPath;

        ScreenshotObserver(ScreenshotListener listener) {
            super(PATH);
            this.listener = listener;
            Log.d(TAG, PATH);
        }

        @Override
        public void onEvent(int event, String path) {
            Log.d(TAG, String.format("Detected new file added %s", path));
            if (path==null || event != FileObserver.CLOSE_WRITE)
                Log.d(TAG, "Don't care.");
            else if (mLastTakenPath!=null && path.equalsIgnoreCase(mLastTakenPath))
                Log.d(TAG, "This event has been observed before.");
            else {
                mLastTakenPath = path;
                listener.onScreenshotTaken(path);
                Log.d(TAG, "Send event to listener.");
            }
        }

        public void start() {
            super.startWatching();
            Log.d(TAG, "Start Watching.");
        }

        public void stop() {
            super.stopWatching();
            Log.d(TAG, "Stop Watching.");
        }
} 

实施文件观察者的活动

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;


public class MainActivity extends Activity implements ScreenshotListener{
    private ScreenshotObserver obs;

    @Override
    protected void onCreate( Bundle savedInstanceState ) {
        super.onCreate(savedInstanceState);

        obs = new ScreenshotObserver(this);
        obs.start();
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onScreenshotTaken( String path ) {
        TextView t = (TextView)findViewById(R.id.monText);
        t.setText("Screenshot taken ! " + path);
    }
}