zoukankan      html  css  js  c++  java
  • android 利用反射机制调用android4.0隐藏的截图方法

    android4.0后系统自带截图功能,但是该方法确实被隐藏的,要调用的话有两个方法,第一就是在android源码环境下编译,但是这个对于反复调试应用的时候比较麻烦,个人也还不太习惯在linux下编程。。。

    第二种方法就是利用java的反射,获取android隐藏起来的方法,该方法位于android.View.Surface类里,大家有兴趣可以去看看android4.0的源码,方法名是screenshot,参数是两个int,分别代表截图的范围也就是宽高吧~并且这是一个静态方法哦~这个方法之后就是调用一个底层代码进行截图了,当然我们不需要管那么多,直接调用screenshot方法就好。

    利用反射调用该方法代码如下:

    首先先获取屏幕宽高

    DisplayMetrics mDisplayMetrics = new DisplayMetrics();
    float[] dims = { mDisplayMetrics.widthPixels,
                    mDisplayMetrics.heightPixels };

    然后就是获取方法并调用了

            Class<?> demo = null;
            try {
                demo = Class.forName("android.view.Surface");
            } catch (Exception e) {
                e.printStackTrace();
            }
            try{
                Method method=demo.getMethod("screenshot",new Class[]{int.class,int.class});
                mScreenBitmap = (Bitmap) method.invoke(demo.newInstance(),(int) dims[0],(int) dims[1]);
              //这里其实可以直接用null替换demo.newInstance(),因为screenshot是静态方法,所以第一个invoke的第一个参数会被自动忽略~所以其实你填什么都没关系。
              //获取的返回值是个bitmap,然后我们就可以为所欲为了~
            }catch (Exception e) {
                e.printStackTrace();
            }

    到了这里问题基本就解决了~但是执行这个方法必须获得系统签名。。。至于怎么签,可以去翻翻我上一篇随笔。

  • 相关阅读:
    剑指OFFER——顺时针打印矩阵
    剑指OFFER——合并两个有序的链表
    剑指OFFER——正则表达式匹配
    剑指OFFER——调整数组顺序使奇数位于偶数前面
    剑指offer——矩阵覆盖(斐波那契变形)
    剑指OFFER的跳台阶问题
    2016携程测试实习生笔试编程题
    大数乘法——2016开发实习生腾讯模拟笔试编程题
    53. Maximum Subarray
    Redis和Memcached的区别【转】
  • 原文地址:https://www.cnblogs.com/blairsProgrammer/p/3658627.html
Copyright © 2011-2022 走看看