編輯:關於Android編程
要實現從應用層截系統屏幕的功能 , 首先你的應用需要有讀取系統文件的權限 ,如何通過process = Runtime.getRuntime().exec(su); 的方式得到權限有在“Android底層事件注入,控制系統的觸摸、點擊、各個按鈕觸發”博客中提到 http://blog.csdn.net/fanjunjian1991/article/details/44648287 ,各位看官可前去瞧瞧。
這次截屏功能實現的方式主要讀取系統FrameBuffer裡的內容,利用/dev/graphics/fb0這個設備節點。【/dev/graphics/fb0代表了LCD的FrameBuffer緩沖區驅動程序,操作該驅動,即相當於操作LCD 的FrameBuffer。所以,由此出發,通過讀取/dev/graphics/fb0的內容,可以很容易就得到LCD屏幕上當前正在顯示的內容。】
讀取文件中數據的代碼如下:
byte[] piex = new byte[width * height * deepth]; InputStream stream = new FileInputStream(new File(file_name)); DataInputStream dStream = new DataInputStream(stream); dStream.readFully(piex); dStream.close(); stream.close();
int[] data = convertToColor(piex); piex = null;
public static int[] convertToColor(byte[] piex) throws Exception { switch (deepth) { case 2: return convertToColor_2byte(piex); case 3: return convertToColor_3byte(piex); case 4: return convertToColor_4byte(piex); default: throw new Exception(Deepth Error!); } }
public static int[] convertToColor_2byte(byte[] piex) { int[] colors = new int[width * height]; int len = piex.length; for (int i = 0; i < len; i += 2) { int colour = (piex[i+1] & 0xFF) << 8 | (piex[i] & 0xFF); int r = ((colour & 0xF800) >> 11)*8; int g = ((colour & 0x07E0) >> 5)*4; int b = (colour & 0x001F)*8; int a = 0xFF; colors[i / 2] = (a << 24) + (r << 16) + (g << 8) + b; } return colors; } public static int[] convertToColor_3byte(byte[] piex) { int[] colors = new int[width * height]; int len = piex.length; for (int i = 0; i < len; i += 3) { int r = (piex[i] & 0xFF); int g = (piex[i + 1] & 0xFF); int b = (piex[i + 2] & 0xFF); int a = 0xFF; colors[i / 3] = (a << 24) + (r << 16) + (g << 8) + b; } return colors; } public static int[] convertToColor_4byte(byte[] piex) { int[] colors = new int[width * height]; int len = piex.length; for (int i = 0; i < len; i += 4) { int r = (piex[i] & 0xFF); int g = (piex[i + 1] & 0xFF); int b = (piex[i + 2] & 0xFF); int a = (piex[i + 3] & 0xFF); colors[i / 4] = (a << 24) + (r << 16) + (g << 8) + b; } return colors; }
Bitmap bm = Bitmap.createBitmap(data, width, height, Bitmap.Config.RGB_565); data = null;
今天看了pro android 3中menu這一章,對Android的整個menu體系有了進一步的了解,故整理下筆記與大家分享。PS:強烈推薦《Pro Android 3
比如我們有 2 個分支:master, dev,現在想查看這兩個 branch 的區別,有以下幾種方式:1.查看 dev 有,而 master 中沒有的:git log
為了練練手,增長逆向分析的知識,本次博客打算分析一下某酒店APP的登陸請求。這次的逆向分析還是以網絡請求為例,通過分析其登陸請求數據的加解密原理,將請求數據從密文轉換成明
寫在前面一家移動互聯網公司,說到底,要盈利總是需要付費用戶的,自己開發支付系統顯然是不明智的,國內已經有多家成熟的移動支付提供商,騰訊就是其中之一。梳理了下微信支付的接入