应PM需求,YOLO可能会对直播过程中的截屏进行检测并通知其他人,类似于Snapchat,此时iOS同事再次表达了先天优势,iOS系统提供了API呀!Google无果之后决定再次造轮子,为了持续表达对Rx的敬意,命名为 RxScreenshotDetector
, github 源码地址 。
安卓系统并没有提供任何截屏检测相关的API,网上针对Snapchat的这项功能进行了分析,大致猜测可能有以下几种途径:
FileObserver
,监听 Screenshots
目录下的文件变化; ContentObserver
,监听 MediaStore.Images.Media.EXTERNAL_CONTENT_URI
资源的变化; 主要参考了 StackOverflow上面的这个回答 。
核心代码如下:
主要有以下几点需要注意:
READ_EXTERNAL_STORAGE
权限,这里我使用了 RxPermissions 来以reactive的方式请求权限; ContentResolver
查询资源的时候,需要按照资源创建时间降序排列,针对最新的一个资源判断是否为截屏的图片,为 contentResolver.query
的最后一个参数传递 MediaStore.Images.Media.DATE_ADDED + " DESC"
即可,而判断图片是否为截图则比较简单,路径包含 screenshot
关键字,且添加时间在10s之内; RxScreenshotDetector
完整使用代码如下: