感谢网友cjd6568358的帮助,新版的Android系统截屏功能已经实现,需要的朋友请移步项目主页:https://github.com/Android-ScreenShot/AndroidScreenShotService(别忘点个star哦)

(转载请注明出处:http://blog.csdn.net/buptgshengod)

1.背景

上一篇讲了在源码中捕获到了android手机的截屏函数(同时按下电源键与音量减,详情http://blog.csdn.net/buptgshengod/article/details/19911909),经过一周的研究还是没有在手机上实现系统截屏功能,总结下尝试的方法与失败的原因。

2.失败方法分析

(1)bufferframe读取fb0

在手机的/dev/graphics目录下的fb0文件是负责屏幕渲染的帧缓存,网上有一些教程讲如何用c将手机中的fb0转换成bmp格式的图片。我在android4.0 联想手机上用着种方法实现了系统截屏功能,但是在android4.2之后这个方法就不行了,framebuffer已经无法读取。

(2)反射方法

因为我们要调用的截屏api是一个@hide的被google隐藏的类,所以就想到了用reflection的方法。java反射机制的原理就是,因为java不同于c或者c++,java是运行在虚拟机中的。所以可以通过反射机制来直接调用程序的内部信息与方法。下面是我参照stackoverflower上面的介绍写的一段java虚拟机的截屏功能反射代码。

sc = Class.forName("android.view.SurfaceControl");
method=sc.getMethod("screenshot", new Class[] {int.class, int.class});
Object o = method.invoke(sc, new Object[]{(int) dims[0],(int) dims[1]});
mScreenBitmap =(Bitmap)o;

编译的时候没有报错,通过log信息知道应该是找到了surfacecontrol函数,但是截屏的内容是null。

可能原因分析:反射机制一般是调用某个隐藏的方法。但是我们要调用的SurfaceControl是整个类都被隐藏了,所以可能是截屏结果是null的原因。

(3)编译去掉@hide的sdk

这是我最先想到也是最简单粗暴的方法。因为已经有了代码所以直接将SurfaceControl.java前面的去掉,生成自己的sdk即可。但是。。。经过一晚上漫长的等待。编译器报错。错误就是出现在surfacecontrol。(当时忘把错误截图了)

可能原因:目前还不清楚,打算再试一次。

(4)加入自己编译生成的core.jar文件和framework.jar文件

将在源码生成的文件的core.jar和framework.jar导入工程,我们发现隐藏的api果然可以调用了。但是在install apk时却报错:Conversion to Dalvik format failed with error 1。

可能原因:apk签名的问题,或者是导入的jar包和原有的android.jar有重复部分。

(5)google code上的开源项目asl。

asl是google code 上的一个开源的库。原理是利用在手机上导入一个后台运行的service,只要接受到intent发送的特定信息就截屏。实验结果是返回黑屏,通过留言了解到好多人都出现这种状况。

可能原因:因为android版本更新造成的。

(6)通过在手记上执行adb shell中的截屏命令

当手机连接电脑时我们执行以下命令可以截图。

adb shell /system/bin/screencap -p /sdcard/screenshot.png

于是我设想在手机端执行这条shell命令,是否能实现截图功能。参照网上的教程自己写了一个可以执行shell命令的程序,详情:http://blog.csdn.net/buptgshengod/article/details/19405819。但是。。。截屏是可以,但是返回的是黑屏。
可能原因:没有找到原因。

3.最后的希望

(1)导入jar包方面签名问题,可以通过替换手机中的对应文件解决,参见: http://blog.csdn.net/vincent_czz/article/details/7642538

(2)调用c层的native截图函数ScreenCaptureNative.cpp。参见:http://blog.csdn.net/zx19899891/article/details/7072291

android4.3 截屏功能的尝试与失败分析相关推荐

  1. android实现长截屏,Android实现全屏截图或长截屏功能

    本文实例为大家分享了Android实现全屏截图或长截屏功能的具体代码,供大家参考,具体内容如下 全屏截图: /** * 传入的activity是要截屏的activity */ public stati ...

  2. Cocos2d-x 截屏功能集成

    1.集成到Director 这里选择把截屏功能继承到Director中,让全局的导演来执行截屏功能是一个很好的主意. void Director::saveScreenshot(const std:: ...

  3. Atitit截屏功能的设计解决方案

    Atitit截屏功能的设计解决方案 自己实现.... 使用快捷键.. 弹出自己的win,,背景是屏幕快照 点击鼠标光标变成十字状态 出现截屏窗口 调整截屏窗口位置与大小 释放鼠标,三个btn,,  复 ...

  4. java网页截图_Java实现的简单网页截屏功能示例

    本文实例讲述了Java实现的简单网页截屏功能.分享给大家供大家参考,具体如下: package awtDemo; import java.awt.AWTException; import java.a ...

  5. html禁止手机截屏,[置顶] Android 应用内禁止截屏功能的实现

    截图介绍 Android的调试工具DDMS提供有截屏功能,很多软件也会有截屏功能,在做支付等安全类应用的时候,为了保证用户的资产和系统安全,往往会禁止应用内截屏,禁止之后,在此应用处于前台的情况下,截 ...

  6. UnityShader19:渲染纹理(上)之截屏功能实现

    一.渲染到 RT 渲染纹理(Render Texture) 就是游戏开发中经常被提到的 RT,渲染到 RT 本质上就是不将渲染的结果直接显示的屏幕上,而是存至一张指定的纹理中 在 Unity 中最简单 ...

  7. python截图工具和模拟鼠标键盘_python PyAutoGUI 模拟鼠标键盘操作和截屏功能

    简介 一款跨平台/无依赖的自动化测试工具,目测只能控制鼠标/键盘/获取屏幕尺寸/弹出消息框/截屏. 安装 pip install pyautogui 鼠标键盘控制 >>> impor ...

  8. android自动截图实现,Android实现截屏功能

    原标题:Android实现截屏功能 该方法主要利用SDK提供的view.getDrawingCache()方法,主要步骤如下: 设置view.setDrawingCacheEnabled(true) ...

  9. Android app和系统应用实现截屏功能

    开发截屏功能也是常用的方法,一种是在普通app中通用的截屏方法,另外一种就是系统应用中使用的截屏方法,比如:SystemUI中添加截图功能 接下来就来实现普通app 和系统应用中截图的功能 1.普通a ...

最新文章

  1. jquery中输入验证中一个不错的效果
  2. SpringBoot注解自动扫描-底层实现
  3. mysql 轨迹数据存储_python爬虫26 | 把数据爬取下来之后就存储到你的MySQL数据库...
  4. ubuntu创建wifi热点plasma-nm
  5. shell脚本遍历分库分表数据
  6. DDMMSS.SS转为DD
  7. 我喜欢现在的工作环境不错工资待遇一般
  8. token会被截取吗_做抖音搬运其他网站视频可以吗?
  9. iOS The document “(null)” requires Xcode 8.0 or later.解决办法
  10. 完整版的OpenLDAP搭建全过程
  11. FL Studio20.8中文完整版本覆盖升级更新说明介绍v20.8.3
  12. Java入门基础知识
  13. C#利用vbs控制3D Stereoscopic Player播放器
  14. 英特尔固态硬盘测试软件,英特尔固态硬盘工具(Intel SSD Datacenter Tool)
  15. linux 限速命令,linux上传限速脚本介绍
  16. 谷歌浏览器上传图片和图片另存为就卡死崩溃解决方案
  17. ps使用,绘制外观图
  18. 字符常量及字符变量(实例:大小写字母转换)
  19. 2021长安二中高考成绩查询,陕西33所高中2020年高考数据已公布!速看
  20. 攻防世界forgot

热门文章

  1. 清华大学贾宁_《财务思维》_体系结构
  2. android连接mysql查询表内记录_Android Room数据库多表查询的使用实例
  3. 夜间灯光数据dn值_中国区域DMSP/OLS夜间灯光影像的校正
  4. centeros php pgsql,centos php添加pgsql扩展
  5. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解
  6. 计算机设计策略,专家经验谈:Excel工作表的设计策略
  7. 事件标志组的原理与创建
  8. 辗转相除法的程序实现
  9. mysql mongodb qps_极高的QPS - DynamoDB与MongoDB相比其他noSQL?
  10. c语言文件查找函数fread,文件函数fread