Android 4.0 截屏(Screenshot)代码流程小结
Android 4.0 截屏
在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能。
Android4.0中,系统自带了截屏功能,使用方法是音量下(VOLUME_DOWN)键+电源(Power)键。
在同时按下2键并保持0.5s左右后,会听到咔嚓一声响声,并弹出如下的一个浮动动画,显示截图效果。
在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能。
Android4.0中,系统自带了截屏功能,使用方法是音量下(VOLUME_DOWN)键+电源(Power)键。
在同时按下2键并保持0.5s左右后,会听到咔嚓一声响声,并弹出如下的一个浮动动画,显示截图效果。
以模块来划分的话,截图功能的代码会依次调用Policy,SystemUI,Surface相关的代码,具体流程如下流程图所示
Policy(PhoneWindowManager.java):在此处完成Key的捕获,当VOLUME_DOWN和Power键被几乎同时按下后,向SystemUI发送Message开始截图。
SystemUI(TakeScreenshotService.java和GlobalScreenshot.java):收到来自Client端的截屏请求后,开始调用Surface的API截屏,并将截取到的图片通过WindowManager以浮动窗口的形式显示给用户查看。
Surface(Surface.java和android_view_Surface.cpp):Framework层的Surface.java只是提供一个native方法,实际实现在JNI处的android_view_Surface.cpp中的doScreenshot(...)方法。
以目前代码情况看,Surface.java中的screenshot方法是有@hide标记的,即在默认的SDK中是没有此方法的,暂不支持App端直接使用。
因为只是@hide标记,如果App要使用,当然也是有方法的,但会和手机ROM有依赖性。我所使用的方法是,在Android源码环境下进行编译,为app赋予system的share uid和platform的签名,然后就可以在4.0的手机中使用App来截屏了。
###关键步骤:
1) 在AndroidManifest.xml中加入android:sharedUserId="android.uid.system" 属性
2)在Android.mk中加入platform签名属性,并在源码环境下编译。或者将相关jar包引入到Eclipse中做第3方库引用,并将生成的apk重新打上platform签名
注:在SurfceFlinger.cpp的onTransact方法中,有对截屏的操作进行权限认证,所以需要为app使用system的shareUserId。
另:从此处代码看,使用android.permission.READ_FRAME_BUFFER的permission应该也可以使用,但测试时通过这种方式未实现,可能哪里操作不对,也有可能Google还只是预留给后续改进而已。
Android 4.0 截屏(Screenshot)代码流程小结相关推荐
- Android 截屏(Screenshot)代码流程小结
一.基本介绍 在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能. Android4.0中,系统自带了截屏功能,使用方法是 ...
- Android 4.0 截屏(Screenshot)
Android 4.0 截屏(Screenshot)代码流程小结 参考文档:Android 4.0 截屏(Screenshot)代码流程小结:http://blog.csdn.net/hk_256/a ...
- android 8.1 截屏,Android8.1 MTK平台 截屏功能分析
前言 涉及到的源码有 frameworksbaseservicescorejavacomandroidserverpolicyPhoneWindowManager.java vendormediate ...
- android模拟器后台截屏,【Android】Android模拟器下截屏及格式转换
一,模拟器信息 Android 模拟器手机的色深是16bit, 即R/G/B=5/6/5. 故需要一些特殊处理才能获得其屏幕图像. 我们可以adb登录进入Android模拟器,先dump出/dev/f ...
- android长截图工具下载,Android实现长截屏功能
本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下 1.MainActivity public class MainActivity extends AppCompa ...
- android 禁止截屏录屏功能,android 应用禁止截屏录屏
更新记录 1.0.0(2021-02-01) Android 应用禁止截屏录屏 平台兼容性 Android iOS 适用版本区间:4.4 - 11.0 × 原生插件通用使用流程: 购买插件,选择该插件 ...
- 应用内截屏的代码,在Activity中测试可用
截屏功能让我十分头疼,想做个无需root的又找不到资料.这里暂且分享一个无需root的,在应用内截屏的代码,本文转自:http://blog.csdn.net/csh159/article/detai ...
- Android App内截屏监控及涂鸦功能实现
Android App内截屏监控及涂鸦功能实现 Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操 ...
- android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析
Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...
最新文章
- xgboost 正则项_XGBoost入门系列第一讲
- python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
- [web 安全] php随机数安全问题
- oracle xmltype转字节,extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法
- SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
- SAP Spartacus baseSite设置的源头 - 路由事件
- 郝斌数据结构教程 送给数据结构新手的福利
- 查看一个定义的方法在哪些地方被使用过(vs2008)
- java隔几秒发数据_java – 如何将数据推送到jsp而不是每2秒请求一次?
- 人员优化浪潮下,苟住要紧。
- 20145202马超 《Java程序设计》 实验一 实验报告
- 【时间序列分析】03.正态时间序列与严平稳序列
- Web前端-课程设计-网易严选
- android媒体--stagefright概述【一】
- [转]100个经典C语言程序(益智类问题)
- java在控制台打印余弦曲线_控制台绘制正弦/余弦曲线
- 盘点编程那些英语单词的中文意思
- 【人在运维囧途_14】打扫干净屋子再请客
- 跨境人才经验分享:跨境电商职位面试经验技巧
- 推动操作系统发展的主要动力是什么?