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