2012-07-26 32 views
2

我需要從後臺運行的服務中截取屏幕截圖。屏幕截圖可以是前臺應用程序,即使它不是我的應用程序,這也是我無法使用DrawingCache的原因。我搜索了一圈,發現這個Android從代碼中截取屏幕截圖,並以root權限登錄

process = Runtime.getRuntime().exec("su -c cat /dev/graphics/fb0"); InputStream is = process.getInputStream();

但我不知道做什麼用的流做。我如何將它變成位圖?我不需要將它保存到文件中,我只需要將它保存在一個變量中。這是爲了根深蒂固的手機。

任何幫助,非常感謝。

+2

當你有InputStream的你爲什麼不只是位圖MYBITMAP = BitmapFactory.decodeStream(是); ? – 2012-07-26 12:03:04

+0

位圖myBitmap = BitmapFactory.decodeStream(is)似乎不起作用,它只是鎖定在該行。沒有例外只是不會繼續。 – Roman 2012-07-28 02:39:23

回答

6

好吧,似乎我自己與這一個。到目前爲止,這是我發現的,對於那些有類似問題的人。請注意,這根據版本而異,而且我正在運行2.3薑餅。

我在/system/bin - screencapscreenshot中發現了2個文件。

screencap返回一個格式的位圖,我不知道如何解碼,同時screenshot使得在SD卡的根目錄中稱爲tmpshot.bmp一個普通bmp文件(無論接受任何形式的命令參數,他們不知道。似乎接受-h,-help,--help等)。

tmpshot.bmp現在似乎是一個可行的解決方案,但我期望避免寫入和讀取SD卡,因爲這是相當的瓶頸。我會繼續尋找,但對於那些現在需要解決方案的人來說,在這裏。編輯:經過進一步的試驗,我發現screencap從另一個ROM(MIUI具體)二進制實際上提供了更多的選項,其中(miui)screencap -t png /sdcard/screen.png產生一個有效的PNG截圖。

2

試試這個

Process sh = Runtime.getRuntime().exec("su", null,null);  
        OutputStream os = sh.getOutputStream(); 
        os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII")); 
        os.flush();   
        os.close(); 
        sh.waitFor(); 

把它放在一個try catch塊