关于安卓4.4.2高速截屏如何实现

关于安卓截屏的研究,本人是经过比较长的时间努力的,可以说尝试了各种方法。如果我能凭自己的力量来解决的话,我是坚决不会做伸手党的。但是,各种方法尝试完却逐一以失败告终。首先,我先把我的问题讲清楚。然后,我再把我的各种失败经历都写上。最后,请有心人帮忙解决下我的问题。
我的问题是:我需要的安卓截屏,当然不是截取自身程序的画面,而是截取任意程序或者任意界面的画面。并且,截屏的速度必须在100毫秒内完成。(截屏到内存的时间在100毫秒内,保存位图到SD卡的时间不算在内)
以下是我各种方法的尝试经历:
第一种,利用SDK提供的View.getDrawingCache()方法。失败原因:只能截取自身程序的屏幕画面。
第二种,利用命令行“ScreenCap -P”。失败原因,截屏速度非常慢,在500毫秒到1500毫秒之间截取一次。
第三种,利用系统的隐藏API,Screenshot。这个需要系统权限,我按照网上教程将APK重新签名为系统权限。但是无效,无法截屏。失败原因:未知。这个只有自己去实践才知道,这个方法或许在安卓以前的版本是可行的。另外,反射来调用该API是无效的。
第四种,基于Android ddmlib进行截屏。失败原因,截屏速度非常慢,跟命令行截屏的速度差不多,可能还要差一点。
第五种,直接读取framebuffer。直接是不能读取framebuffer的,需要设置该文件的读写权限,这我是知道的。在安卓4.1.1版本,这是可行的方案,速度也极快,一般在30毫秒左右完成。但是,在安卓4.2版本以后,系统似乎对该方法进行了屏蔽。具体的表现是,第一次读取,能非常完美读取出屏幕图像。第二次,第三次读取的时候,你会发现,除了状态栏以外,其他部分都是空白的。关于这一点,我百思不得其解,不知道其原因是什么。而当你切换一下程序,或者切换下横屏竖屏时,再读取,那么又是一张完整的屏幕图像了。失败原因:未知。
第六种,利用一个开源项目android-screen-library来截屏。失败原因:速度极慢。
以上6种,可以说是我搜遍全网找到的6种截屏方式了。但是,无一能够满足我的需求。本人初学安卓不久,无力解决,请各位达人帮帮忙。在此谢过!

这个要想快,得自己写显卡驱动才行了。

个人认为可以重点研究一下:直接读取 framebuffer 的方法,因为第一次读取就说明方法还是有效的。
速度慢,主要看实现的方法,如果能了解到实现的方法才能解决速度慢的问题。

第一种,利用SDK提供的View.getDrawingCache()方法。失败原因:只能截取自身程序的屏幕画面。===>不需讨论,肯定的
第二种,利用命令行“ScreenCap -P”。失败原因,截屏速度非常慢,在500毫秒到1500毫秒之间截取一次。 ==》太慢
第三种,利用系统的隐藏API,Screenshot。这个需要系统权限,我按照网上教程将APK重新签名为系统权限。但是无效,无法截屏。失败原因:未知。这个只有自己去实践才知道,这个方法或许在安卓以前的版本是可行的。另外,反射来调用该API是无效的。 ==》这种方法在4.4以前应该是可以的,我测试过。4.4以后好像就不行了。但是应该有新的方法,因为4.4系统你同时按住音量减和电源也能截图。但目前不知道4.4与4.2系统关于这里有什么改动,估计是对权限重新进行了判断。这个方法是最有可能成功的,也是最快的方法,直接获取到图片到内存,且可以每100ms连续截图都没问题。具体方法还需要研究。要不然刷回4.2也行啊。
第四种,基于Android ddmlib进行截屏。失败原因,截屏速度非常慢,跟命令行截屏的速度差不多,可能还要差一点。 ==》太慢而且不好用
第五种,直接读取framebuffer。直接是不能读取framebuffer的,需要设置该文件的读写权限,这我是知道的。在安卓4.1.1版本,这是可行的方案,速度也极快,一般在30毫秒左右完成。但是,在安卓4.2版本以后,系统似乎对该方法进行了屏蔽。具体的表现是,第一次读取,能非常完美读取出屏幕图像。第二次,第三次读取的时候,你会发现,除了状态栏以外,其他部分都是空白的。关于这一点,我百思不得其解,不知道其原因是什么。而当你切换一下程序,或者切换下横屏竖屏时,再读取,那么又是一张完整的屏幕图像了。失败原因:未知。 ===》以前是可以的,越早的android系统越容易实现,到后面的系统对安全性考虑更多了。所以就不行了。之所以会出现你说的问题不是因为你代码有问题而是系统采取了安全措施。当然你可以研究下,再找到对策。也比较难。
第六种,利用一个开源项目android-screen-library来截屏。失败原因:速度极慢。==》没研究过。

个人觉得:3、5、6你可以继续研究下。每一种都很难,这个真是没办法,有新的进展@我。

我最近也在研究截屏,需求和你的一样,也是尝试各种方法都不行,求指教 qq 1003402938

public Bitmap takeScreenshot ()
Takes a screenshot.

不知道楼主是怎么实现的。。可以分享一下思路吗?

请教楼主实现思路 qq1510673264

我最近也在研究个脚本项目,也需要楼主的高速截屏思路...请问有进展了没?可以否分享下方案...QQ:75410679

我也在折腾中,求交流,QQ17044002