Android 截屏监听(截图分享功能)
一、需求背景
如果检测到用户在 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 里 获取不到图片文件,大概原因猜测就是魅族把这部分的源码修改了,先通知数据库改变,再保存文件。
要解决这个问题,大概有两种办法:
- 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 截屏监听(截图分享功能)相关推荐
- Android 截屏监听(截图分享功能实现)
具体来说就是,检测到了用户在应用内有截图,弹出一个分享界面, 在截图下方添加一个二维码,进行分享. ●●● 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食, ...
- Android App中监听系统截屏(截屏监听功能)
功能需求: App内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司logo等一系列操作. 首先来app界面图及截屏监听图添加效果图 主要是利用内容 ...
- Android系统截屏监听工具
Android系统截屏监听工具 做系统截屏通知的时候,找了很多资料,测试后发现要做挺多机型适配的,而且有时候会没有监听到,有时候又监听到多次,不能实现想要的效果.一下是最终的解决方案,已在足够多的手机 ...
- android App内监听截图加二维码
Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操作时,进行对图片的二次操作,例如添加二维码,公司 ...
- Android app内截屏监听
1.在 Application onCreate 方法设置 activity 生命周期监听 package com.example.myscreenshot;import android.app.Ac ...
- 详细讲解安卓截屏监听操作
需求 项目中有时会遇到监听用户截屏操作的需求,应用场景也比较丰富. eg. 1: 某个隐私页面禁止截屏,当发现用户截屏后,删除该截屏文件: eg. 2: 当用户截屏时,可能是需要进行分享,意见反馈等操 ...
- android截屏元素不全,截图总不全?2招教你网页完整截图和全文拼图
在PC上,我们可以利用一些小工具对某个网页或整篇Word文档进行完整截屏,以便分享和保存.问题来了,在没有PC的情况下,我们如何用Android手机进行类似的操作呢? 如果是通过浏览器打开的网页,我们 ...
- 三星 android截屏快捷键,三星手机截图快捷键以及截图方法【图文】
三星手机的出货量仍然占据着全球绝大多数的分量,而三星手机之所以会深受国内外消费者喜欢,主要是因为它拥有非常强大的性能以及非常好的使用体验.而三星手机为了不断增加消费者的使用体验,因此三星为人们开发出了 ...
- iOS录屏和截屏监听(以及出现的bug)
需求: 出于项目安全性方面的考虑增加保护,需要在APP内敏感页面输入框做防用户截屏录屏的功能 截屏 应用中只会收到已经截屏的通知并没办法干预不能截屏,所以截屏我们只能做到提示的作用 做法: 在需要防止 ...
- Android截屏事件监听
1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能自己动手来丰衣足食,一般有三种方法. 利用FileObserver监听某个目录中资源变化情况 利用ContentObserv ...
最新文章
- 写文章的时候,还是应该现在typora里面写,之后放在latex...因为typora好改
- Spring框架的事务管理及应用
- kij是不是c语言语句,C语言考试题库及答案分析(总35页).doc
- DDoS分布式拒绝服务攻击简介
- leetcode python3 简单题172. Factorial Trailing Zeroes
- Bamboo基础概念
- 软件架构师的修炼之道
- Android面试准备复习之Android知识点大扫描
- python将图片base流保存为图片文件
- html5淘宝注册界面设计,电商登陆注册页设计分析
- angr源码分析——数据依赖图 DDG
- Qt深入浅出(六)设计师界面
- The Sandbox 开启 2022 年新征途,Mega City 土地销售来啦
- Drill系列(1):Dremel的原理
- 如何在word中插入图表目录(插图清单、表格清单)
- set头文件使用方法
- SQL Studio
- 技术团队如何开展团队分享
- 电路分析题目详解(三)
- 基于深度学习的高精度家禽猪检测识别系统(PyTorch+Pyside6+YOLOv5模型)