没有合适的资源?快使用搜索试试~ 我知道了~
Android系统没有对用户截屏行为提供回调的api,所以我们只能走野路子来获取用户是否截屏了。一般大家都会采用如下两种方法 1.监听截屏图片所在目录变化(FileObserver) 2.监听媒体库的变化(ContentObserver) 上面两种方法均不是万能的,需要结合使用才能达到良好的效果,首先看看如何监控目录 在android中,我们可以通过FileObserver来监听目录变化,先来看看如何使用 private static final File DIRECTORY_PICTURES = new File(Environment.getExternalStorageDire
资源详情
资源评论
资源推荐
android截图事件监听的原理与实现截图事件监听的原理与实现
Android系统没有对用户截屏行为提供回调的api,所以我们只能走野路子来获取用户是否截屏了。一般大家都会采用如下两种
方法
1.监听截屏图片所在目录变化(FileObserver)
2.监听媒体库的变化(ContentObserver)
上面两种方法均不是万能的,需要结合使用才能达到良好的效果,首先看看如何监控目录
在android中,我们可以通过FileObserver来监听目录变化,先来看看如何使用
private static final File DIRECTORY_PICTURES = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_PICTURES);
private static final File DIRECTORY_DCIM = new File(Environment.getExternalStorageDirectory(), Environment.DIRECTORY_DCIM);
if (manufacturer.equalsIgnoreCase("xiaomi")) {
DIRECTORY_SCREENSHOT = new File(DIRECTORY_DCIM, "Screenshots");
} else {
DIRECTORY_SCREENSHOT = new File(DIRECTORY_PICTURES, "Screenshots");
}
FILE_OBSERVER = new FileObserver(DIRECTORY_SCREENSHOT.getPath(), FileObserver.ALL_EVENTS) {
@Override
public void onEvent(int event, String path) {
if (event == FileObserver.CREATE) {
String newPath = new File(DIRECTORY_SCREENSHOT, path).getAbsolutePath();
Log.d(TAG, "path: " + newPath);
}
}
};
我们对指定目录的指定事件监听即可,当事件被触发时onEvent会回调。这里我们只关心目录中有没有新的文件生成。
坑坑1::在实践中发现,并不是所有手机都允许如此监听或者说都能收到回调。有的手机上面无法收到CREATE事件,但是可以
收到其他事件。
我还发现,有的时候收到的事件并没有在FileObserver中定义,比如32768!下面是Linux中相应event对应的含
义,32768=IN_IGNORED,但是为什么会ignore,并不清楚。
http://huoche.7234.cn/images/jb51/sy22ffig1ep.h&,然后再修改文件名(去掉“.”)。这种情况下,我们可能就会收到两次用
户截图事件的回调(方法1和方法2都可能收到回调),但实际用户只截了一次。
这里我做了一个特殊处理,在判断是否是同一个文件时,只判断文件名,而不去管文件的完整路径也不管文件是否隐藏(也就
是不比较文件名前面的“.”)
//仅靠文件名而不是全路径判断是否为同一个截图文件,因为有些系统对截图有move操作
private static boolean isSameFile(String newPath) {
if (TextUtils.isEmpty(sScreenshotPath)) {
return false;
}
return TextUtils.equals(removePrefixDot(new File(sScreenshotPath).getName()), removePrefixDot(new
File(newPath).getName()));
}
private static String removePrefixDot(@NonNull String filename) {
if (filename.startsWith(".")) {
return filename.substring(1);
}
return filename;
}
至此,android截图事件监听基本结束,由于测试机器有限,故无法保证上述方法万无一失。
您可能感兴趣的文章您可能感兴趣的文章:Native.js获取监听开关等操作Android蓝牙设备实例代码native.js获取手机硬件基本信息实例代码android
版Dcloud的native.js直接拨打电话Android实例代码DCloud的native.js调用系统分享实例Android版代码Android中通过view方
式获取当前Activity的屏幕截图实现方法Android中如何获取视频文件的截图、缩略图Android模拟器中窗口截图存成文件实现
思路及代码详解有关Android截图与录屏功能的学习Android实现截图和分享功能的代码Android获取常用辅助方法(获取屏幕高
weixin_38655990
- 粉丝: 1
- 资源: 879
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0