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();
        }

到了這里問題基本就解決了~但是執行這個方法必須獲得系統簽名。。。至於怎么簽,可以去翻翻我上一篇隨筆。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM