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左右后,会听到咔嚓一声响声,并弹出如下的一个浮动动画,显示截图效果。

二.代码调用流程.md外部引用原始文档

以模块来划分的话,截图功能的代码会依次调用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(...)方法。

三.App端如何使用截屏功能.md外部引用原始文档

以目前代码情况看,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)代码流程小结相关推荐

  1. Android 截屏(Screenshot)代码流程小结

    一.基本介绍 在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能. Android4.0中,系统自带了截屏功能,使用方法是 ...

  2. Android 4.0 截屏(Screenshot)

    Android 4.0 截屏(Screenshot)代码流程小结 参考文档:Android 4.0 截屏(Screenshot)代码流程小结:http://blog.csdn.net/hk_256/a ...

  3. android 8.1 截屏,Android8.1 MTK平台 截屏功能分析

    前言 涉及到的源码有 frameworksbaseservicescorejavacomandroidserverpolicyPhoneWindowManager.java vendormediate ...

  4. android模拟器后台截屏,【Android】Android模拟器下截屏及格式转换

    一,模拟器信息 Android 模拟器手机的色深是16bit, 即R/G/B=5/6/5. 故需要一些特殊处理才能获得其屏幕图像. 我们可以adb登录进入Android模拟器,先dump出/dev/f ...

  5. android长截图工具下载,Android实现长截屏功能

    本文实例为大家分享了Android实现长截屏功能的具体代码,供大家参考,具体内容如下 1.MainActivity public class MainActivity extends AppCompa ...

  6. android 禁止截屏录屏功能,android 应用禁止截屏录屏

    更新记录 1.0.0(2021-02-01) Android 应用禁止截屏录屏 平台兼容性 Android iOS 适用版本区间:4.4 - 11.0 × 原生插件通用使用流程: 购买插件,选择该插件 ...

  7. 应用内截屏的代码,在Activity中测试可用

    截屏功能让我十分头疼,想做个无需root的又找不到资料.这里暂且分享一个无需root的,在应用内截屏的代码,本文转自:http://blog.csdn.net/csh159/article/detai ...

  8. Android App内截屏监控及涂鸦功能实现

    Android App内截屏监控及涂鸦功能实现 Android截屏功能是一个常用的功能,可以方便的用来分享或者发送给好友,本文介绍了如何实现app内截屏监控功能,当发现用户在我们的app内进行了截屏操 ...

  9. android解锁界面分析,Android 7.0 锁屏解锁之向上滑动显示解锁界面分析

    Android 7.0 锁屏解锁之向上滑动显示解锁界面分析 by jing.chen 锁屏的解锁操作是在锁屏界面向上滑动实现的,通过向上滑动调出解锁界面(如图案.PIN.密码解锁界面),在解锁界面输入 ...

最新文章

  1. xgboost 正则项_XGBoost入门系列第一讲
  2. python 第三方包自动导入_7行代码,彻底告别python第三方包import导入问题!
  3. [web 安全] php随机数安全问题
  4. oracle xmltype转字节,extractvalue处理XMLTYPE类型超过4000字节ORA-01706的解决方法
  5. SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
  6. SAP Spartacus baseSite设置的源头 - 路由事件
  7. 郝斌数据结构教程 送给数据结构新手的福利
  8. 查看一个定义的方法在哪些地方被使用过(vs2008)
  9. java隔几秒发数据_java – 如何将数据推送到jsp而不是每2秒请求一次?
  10. 人员优化浪潮下,苟住要紧。
  11. 20145202马超 《Java程序设计》 实验一 实验报告
  12. 【时间序列分析】03.正态时间序列与严平稳序列
  13. Web前端-课程设计-网易严选
  14. android媒体--stagefright概述【一】
  15. [转]100个经典C语言程序(益智类问题)
  16. java在控制台打印余弦曲线_控制台绘制正弦/余弦曲线
  17. 盘点编程那些英语单词的中文意思
  18. 【人在运维囧途_14】打扫干净屋子再请客
  19. 跨境人才经验分享:跨境电商职位面试经验技巧
  20. 推动操作系统发展的主要动力是什么?

热门文章

  1. 【笔试题】京东2017秋招笔试真题
  2. vue.js 三种方式安装--npm安装
  3. BZOJ 1103 大都市MEG
  4. 简单显示分配器的实现
  5. android studio导入jar包
  6. 从1~N中任选出三个数,最小公倍数最大
  7. ORA-15260: permission denied on ASM disk group
  8. 每日记载内容总结22
  9. java拾遗录(一)
  10. 小议 static 关键字