Android截屏

前段时间,公司要搞MDM,也是是设备管理,话说这个玩意没有硬件厂商的配合是无法完成的,但是领导说先弄一弄,试一试,然后就有了这篇文章
废话不多说,开整
Android的截屏无非就是前台截屏和后台截屏两种
一.先说前台截屏,在当前APP中的截屏,此方法只能在当前进程中截取屏幕,很多应用都是使用此方法截屏后,做分享使用

这里写图片描述

二.跨进程后台截屏
1.Android 4.0以下版本的后台截屏
通过JNI方式截取屏幕,但是需要源码的编译环境,网上的资料基本都是Android 2.3版本左右的参考代码,由于源码环境不具备 所以还不能进行尝试
2.Android 4.0-4.2版本后台截屏,这个版本可以使用反射android.view.Surface类的screenshot方法完成,优点就是无需Root但是适用版本太少,打包完的APK需要系统签名才可以运行

这里写图片描述

3.Android4.3以上,5.0以下版本的截屏,4.3版本其实也存在screenshot方法,只不过他所属的整个类android.view.SurfaceControl都被hide了,所以通过一般的反射是无法调用的,ROOT之后即可解决,先执行下 Runtime.getRuntime().exec(“su”),然后在执行我们需要的命令。实际上就是在Android端执行了shell命令

这里写图片描述

4.Android5.0以上版本,5.0版本API文档中出现了新的接口服务类,我们可以调用其为我们做截屏操作,使用了service,且该服务需要获取到startActivityForResult中的结果数据,由于直接在service中调用startActivityForResult不现实,所以后台截屏不是十分适合,程序起来的时候会询问权限
首先创建ImageReader的实例

这里写图片描述

触发截屏事件

这里写图片描述

获取屏幕内容

这里写图片描述

与此同时,获取MediaProjection实例,这里的mResultData就是授权返回的结果

这里写图片描述

得到当前屏幕的内容,注意只是内容

这里写图片描述

开始截取屏幕

这里写图片描述

起一个异步线程 转换Image为Bitmap 存储

这里写图片描述

5.0以上的截屏 还在实践当中 其中还有诸多不足,比如权限的给予,图片文件有时候会NullPointer,图片大小为0

/***********************************************END****************************************************/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值