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(); }
到了這里問題基本就解決了~但是執行這個方法必須獲得系統簽名。。。至於怎么簽,可以去翻翻我上一篇隨筆。