Android 截屏监听(截图分享功能实现)

By 吴思博 20180428


1. 背景 :

    具体来说就是,检测到了用户在应用内有截图,弹出一个分享界面, 在截图下方添加一个二维码,进行分享。

先展示下效果图


2. 前言

Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法。

利用FileObserver监听某个目录中资源变化情况

利用ContentObserver监听全部资源的变化

监听截屏快捷按键  ( 由于厂商自定义Android系统的多样性,再加上快捷键的不同以及第三方应用,监听截屏快捷键这事基本不靠谱,可以直接忽略 )


3.Android截屏系统做的事情


通过读源码(TakeScreenshotService 和 GlobalScreenshot )总结Android截屏系统做的事情:

保存截屏Bitmap到本地文件

把图片记录插入到ContentProvider中

发送一个截图相关的Notification

解决方法:

利用FileObserver监听某个目录中资源变化情况

利用ContentObserver监听全部资源的变化


4. FileObserver 与 ContentObserver 比较

对于截图监听有两种常用方案

方案一: 通过FileObserver监听截屏文件夹,当有新的截屏文件产生时,调用设定的回调函数执行相关操作。

优点:

1. 实现简单

缺点:

1. 不同手机默认的截屏路径可能不同,需要做适配处理

2. 不同手机截屏触发的事件名称可能不同,需要测试适配

3. 监听到截屏事件后马上获取图片获取不到,需要延迟一段时间


方案二:通过ContentObserver监听多媒体图片库资源的变化。当手机上有新的图片文件产生时都会通过MediaProvider类向图片数据库插入一条记录,以方便系统的图片库进行图片查询,可以通过ContentObserver接收图片插入事件,并获取插入图片的URI。

优点:

1. 不同手机触发的事件是一样的

缺点:

1. 不同手机截屏文件的前缀可能不同,需要做适配

2. 监听到截屏事件后马上获取图片获取不到,需要延迟一段时间


4.1 FileObserver实现

最开始就是想到这个方法, 当FileObserver监听某个目录中资源变化情况,时候获取到文件路径

a. 关键代码:

监听到截屏事件后马上获取图片获取不到,可能需要延迟一段时间。  做while循环,收到Create时间后,Thread.sleep(600), 当尝试最大次数(MAX_TRYS)失败后放弃。

SNAP_SHOT_FOLDER_PATH  的路径不同手机不一样,要去适配各种手机的路径


需要权限,否则可能收不到事件。

    (如果没有收到事件,检查一下权限和监听的目录)


b. 小结:

每一次截屏,有多个事件回调

每一次截屏,不同的手机,事件回调可能有些不同。

不同的手机,默认截屏图片储存的文件夹可能不同

FileObserver只能监听文件夹中子文件和子文件夹的变化情况,不能监听子文件夹内部的资源变化

基于  不同的手机,默认截屏图片储存的文件夹可能不同 和 可能收不到事件,这种方法并不能适用于所有的机型。


4.2 .ContentObserver实现

放弃了FileObserver方法, 最后选择了ContentObserver方法。通过ContentObserver监听多媒体图片库资源的变化。当手机上有新的图片文件产生时都会通过MediaProvider类向图片数据库插入一条记录,以方便系统的图片库进行图片查询,可以通过ContentObserver接收图片插入事件,并获取插入图片的URI。

a.步骤

(1)添加权限

(2)初始化、注册和取消监听

(3)媒体内容观察者 (观察媒体数据库的改变)

(4)数据改变时查询数据库中最后加入的一条数据,处理获取到的第一行数据。

(5)处理监听到的资源, 设置最大等待时间500ms (因为某些魅族手机保存有延迟)

(6)设置回调工具


b.遇到问题:

主要问题都在第五步:

(1)因为某些魅族手机保存有延迟 , 轮询与延迟,设置最大等待时间500ms

(2)要判断是否是截屏,有可能是用户自己再文件夹中添加了一张图片


c. 小结:

ContentObserver会监听到所有图片资源的变化情况,要做好去重过滤工作

根据uri去读取ContentProvider内容时候,记得关闭cursor,防止内存泄漏

关键字可扩展,大大增加的监听的范围,比FileObserver好用多了,但是去重过滤会比FileObserver复杂一些。


5.  二维码拼接(bitmap)

1、Bitmap纵向拼接


补充 :

今天测试时候 ,发现个别手机会自己修改截图文件夹的文件, 截屏功能会误以为是用户在截屏操作,进行捕获。 所以加了一个时间判断

打印观察到截图插入时间不会改变

附上 : 获取插入时间(单位是秒非毫秒)

参考文献

1、Android 截屏事件监听https://juejin.im/entry/58647ee9128fe1006d0f4454

2、严选Android-截图分享功能实现与踩坑分享 http://ks.netease.com/blog?id=7038

3、Android App内截屏监控及涂鸦功能实现 https://www.jianshu.com/p/2e6d52abf115

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,...
    JackMeGo阅读 12,399评论 8 39
  • 《青春时代2》开播了,因为第一部非常好看,所以本季一更新就接着追了。第二季一开始很好的与第一季进行了过渡,不管你看...
    饲猫阅读 765评论 0 2
  • 那明亮的如同手帕入窗的月光镶嵌在我的思虑里如同一块绵软的羊白玉试图拾起宝贝儿似的捧在心口恰如试图拥抱你恰如忆起你用...
    XXKY阅读 358评论 2 7
  • 1 阿呆喜欢用微信聊天,平日少言寡语的他,一动手打字就变得才思敏捷、风趣幽默。用他的话说,相比于烟火味十足的现实世...
    关你阅读 3,174评论 3 3