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

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

                                     Apk签名相关:http://blog.csdn.net/electricity/article/details/6449998

                           用Android自带的signapk.jar + .x509.pem + .pk8签名应用程序http://mysuperbaby.iteye.com/blog/1420612


一、基本介绍

           在Android 4.0 之前,Android手机上如果要使用截屏功能,只能通过Root手机,且使用第3方截图软件来实现截屏功能。

           Android4.0中,系统自带了截屏功能,使用方法是音量下(VOLUME_DOWN)键+电源(Power)键。

           在同时按下2键并保持0.5s左右后,会听到咔嚓一声响声,并弹出一个浮动动画,显示截图效果。

 

二、代码调用流程

         


        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类中的screenshot()方法,这个调用JNI的doScreenshot()方法。

注:在SurfceFlinger.cpp的onTransact方法中,有对截屏的操作进行权限认证,所以需要为app使用system的shareUserId。         


三、App端如何使用截屏功能

        以目前代码情况看,Surface.java中的screenshot方法是有@hide标记的,即在默认的SDK中是没有此方法的,暂不支持App端

直接使用。

有如下解决方案:

1、自己将源代码中的@hide去掉,然后编译一个sdk来替换默认的sdk

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 22
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值