一、需求背景

如果检测到用户在 app 中有截图行为,那么弹出一个分享提示框,提示用户去分享这个截图。

本文主要从三个方面来讲:

1、截图检测的具体实现

2、截图检测踩到的坑

3、截图合成

二、截图分享实现

1、截图分享实现分为两个部分,首先是截图事件的监听。安卓系统并没有提供 api 来监听系统截图事件,也没有什么广播可以用来监听这类事件,那要

怎么解决呢?我们先来看下截图源码。

两个类都在目录framework/base/package/SystemUI/src/com/android/systemui/screenshot 下

从代码里可以看到,截图之后做的主要事情是:

a、保存截屏 Bitmap 到本地文件

b、把图片记录插入到 ContentProvider 中

c、发送一个截图相关的 Notification

那么看到这里,我们大致可以想到两种用来监听截图事件的方式:

监听 ContentProvider 数据改变

监听截图文件目录数据改变

监听截图事件的三种方式

2、截图检测遇到的问题

坑1:监听截图事件的三种方式,这个方法有个问题就是:无法监听到通知栏中提供的截图按键。

坑2:TakeScreenshotService 所运行的进程名为 com.android.systemui.screenshot这个方法在主流的 ROM 上经过测试,目前没有发现问题,

但是这个方案最终没有用在App上,主要担心的就是某些奇葩的国产 ROM 把进程名给改了,导致这个函数判断出错。

坑3:其次是截图文件获取的问题,从之前的系统源码里我们看到,GlobalScreenShot 截图之后,做的工作首先是保存图片,然后再去修改图片数

据库,所以在某些没有大改的系统里,我们在 ContentObserver 的 onChange 回调里是可以获取到图片文件的。但是后来在魅族的系统上测试时,

发现在 onChange 里 获取不到图片文件,大概原因猜测就是魅族把这部分的源码修改了,先通知数据库改变,再保存文件。

要解决这个问题,大概有两种办法:

  1. FileObserver 监听文件写完成事件,我们只要监听 CLOSE_WRITE 即可

坑4:按照剧本来说,这里的代码大概是没有问题的,然后放到魅族系统上测试了一下,只监听到了 CREATE 事件,这个方案被迫放弃。

2.轮询+延迟

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

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

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

坑8:部分机器写入截图实在是太慢,给个800ms延迟去通知显示分享

三、终上所述,两种方案实现截屏监听分享:

方案1:监听截图文件目录数据改变。

继承FileObserver类,筛选择出手机截屏文件夹,监听截屏文件事件变化,由于某些魅族手机保存有延迟且某些魅族系统上只监听到了CREATE事

件,那么同时监听CLOSE_WRITE(8)、CREATE(256)事件分别做特殊处理;

方案2:监听 ContentProvider 数据改变。

继承ContentObserver类,在handleMediaContentChange方法内处理数据。主要注意点:1、要判断是否是截屏,有可能是用户自己再文件夹中添

加了一张图片;2、个别手机会自己修改截图文件夹的文件, 截屏功能会误以为是用户在截屏操作,进行捕获。 所以加一个时间判断;

四、图片合成

截图图片合成主要做的工作大概就是图片的大小控制了。假如我们把全质量的截图读取到内存中,那么对于小屏幕手机来说,可能影响不大,但

是对于配有2k屏的手机来说,这就是一场灾难了。

坑10:注意bitmap oom

坑11:若需求要去掉顶部状态栏和底部栏

总结:

最终我采用方案1完美实现截图分享功能。

拿来即用,项目GitHub地址 ScreenshotsShare,喜欢关注一个吧。

一个变种需求:H5截屏监听分享功能

同理:App本地利用上述方式监听截图,发送特定指令给H5(需两端提前约定指令\回调方法)即可

25人点赞
技术文档

作者:程序员大耳
链接:https://www.jianshu.com/p/9e9e7545f0b4

结语

以上这篇文章的全部内容了,感谢各位的阅读,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎扫描关注博主一起学习!!

还有一些学习福利送给大家,有需要可扫描下方二维码免费领取

由于篇幅有限,这里以图片的形式给大家展示一小部分。

详细整理扫描下方二维码直接领取;

Android架构视频+BAT面试专题PDF+学习笔记

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

Android 截屏监听(截图分享功能)相关推荐

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

    具体来说就是,检测到了用户在应用内有截图,弹出一个分享界面, 在截图下方添加一个二维码,进行分享. ●●●  前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食, ...

  2. Android App中监听系统截屏(截屏监听功能)

    功能需求: App内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列操作. 首先来app界面图及截屏监听图添加效果图 主要是利用内容 ...

  3. Android系统截屏监听工具

    Android系统截屏监听工具 做系统截屏通知的时候,找了很多资料,测试后发现要做挺多机型适配的,而且有时候会没有监听到,有时候又监听到多次,不能实现想要的效果.一下是最终的解决方案,已在足够多的手机 ...

  4. android App内监听截图加二维码

    Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司 ...

  5. Android app内截屏监听

    1.在 Application onCreate 方法设置 activity 生命周期监听 package com.example.myscreenshot;import android.app.Ac ...

  6. 详细讲解安卓截屏监听操作

    需求 项目中有时会遇到监听用户截屏操作的需求,应用场景也比较丰富. eg. 1: 某个隐私页面禁止截屏,当发现用户截屏后,删除该截屏文件: eg. 2: 当用户截屏时,可能是需要进行分享,意见反馈等操 ...

  7. android截屏元素不全,截图总不全?2招教你网页完整截图和全文拼图

    在PC上,我们可以利用一些小工具对某个网页或整篇Word文档进行完整截屏,以便分享和保存.问题来了,在没有PC的情况下,我们如何用Android手机进行类似的操作呢? 如果是通过浏览器打开的网页,我们 ...

  8. 三星 android截屏快捷键,三星手机截图快捷键以及截图方法【图文】

    三星手机的出货量仍然占据着全球绝大多数的分量,而三星手机之所以会深受国内外消费者喜欢,主要是因为它拥有非常强大的性能以及非常好的使用体验.而三星手机为了不断增加消费者的使用体验,因此三星为人们开发出了 ...

  9. iOS录屏和截屏监听(以及出现的bug)

    需求: 出于项目安全性方面的考虑增加保护,需要在APP内敏感页面输入框做防用户截屏录屏的功能 截屏 应用中只会收到已经截屏的通知并没办法干预不能截屏,所以截屏我们只能做到提示的作用 做法: 在需要防止 ...

  10. Android截屏事件监听

    1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserv ...

最新文章

  1. 写文章的时候,还是应该现在typora里面写,之后放在latex...因为typora好改
  2. Spring框架的事务管理及应用
  3. kij是不是c语言语句,C语言考试题库及答案分析(总35页).doc
  4. DDoS分布式拒绝服务攻击简介
  5. leetcode python3 简单题172. Factorial Trailing Zeroes
  6. Bamboo基础概念
  7. 软件架构师的修炼之道
  8. Android面试准备复习之Android知识点大扫描
  9. python将图片base流保存为图片文件
  10. html5淘宝注册界面设计,电商登陆注册页设计分析
  11. angr源码分析——数据依赖图 DDG
  12. Qt深入浅出(六)设计师界面
  13. The Sandbox 开启 2022 年新征途,Mega City 土地销售来啦
  14. Drill系列(1):Dremel的原理
  15. 如何在word中插入图表目录(插图清单、表格清单)
  16. set头文件使用方法
  17. SQL Studio
  18. 技术团队如何开展团队分享
  19. 电路分析题目详解(三)
  20. 基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)

热门文章

  1. angular 更新表单值的两种方法: setvalue,patchvalue
  2. 全球与中国电动车PTC辅助加热器市场深度研究分析报告
  3. 洗小龙虾、麻将,洗碗机品牌“大秀肌肉”会让年轻人心动吗?
  4. Linux 误删除文件恢复
  5. 蛋白组学搜库分析软件 MaxQuant使用教程
  6. python实战笔记之(4):刷博客浏览量
  7. 打印纸张尺寸换算_常用纸张的尺寸大小对照表
  8. 可视化基础讲解之色彩搭配!
  9. LS-DYNA系列_Mie-Gruneisen状态方程
  10. 用python在大麦网抢票_大麦网抢票工具系列(一)