2017-07-16 32 views
0

我知道,人們可以採取截圖經由ADB的Android設備與採取截圖與亞洲開發銀行和檢索它的無渣寫入文件

$ adb shell screencap -p /mnt/sdcard/sc.png 
$ adb pull /mnt/sdcard/sc.png 

然而,這寫在手機上和電腦上的文件,我想避免。

所以我找到了以下SO問題,並且答案顯示,當您不指定文件時,圖像會打印到Std輸出。 我測試了這個從控制檯,它真的打印二進制數據到控制檯。

Android: It there a way to read screenshot from memory without saving to internal/external storage?

現在我想利用這一技術,從Java啓動一個進程,執行

adb shell screencap 

命令,讀取輸出和創建輸出的BufferedImage。

我想是這樣的

ProcessBuilder pb = new ProcessBuilder("cmd"); 
Process start = pb.start(); 
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream)); 
bw.write("adb shell screencap"); 
bw.newLine(); 
bw.flush(); 
// wait some time for the process to print the image to the console 
start.waitFor(10, TimeUnit.SECONDS); 
StringBuilder sb = new StringBuilder(9000000); 
Scanner s = new Scanner(start.getInputStream()); 
while (s.hasNext()) { 
     sb.append(s.next()); 
} 
String result = sb.toString(); 

不幸有相當我的代碼的幾個問題。

  1. 程序獲得的截圖後,不終止 - 所以start.waitFor做,因爲我想它的工作

  2. 目前我的代碼讀取字符,在這裏我居然要讀取的字節

    不太工作
  3. 用掃描儀讀取似乎有點慢閱讀數以百萬計的字符/字節時

也許有人可以點我的方向,這樣我可以得到它的工作。 謝謝!

+0

你爲什麼用java來調用'adb'? –

+0

原因我有一個java程序,然後將進一步處理該圖像 –

回答

0

尋找一些更多的時間我碰到ddmlib已經有采取截圖,並通過內置在亞行執行各種其他任務的功能來了之後。
圖書館的偉大工程,明確提出我更容易通過亞洲開發銀行執行命令。

2

爲什麼複雜的事情。如果你是調用adb,並且希望它的輸出只需要運行

adb exec-out screencap -p > myimg.png 

exec-out代替shell得到的原始數據(即圖像)。

+0

OP的問題有很多問題,但是從java程序運行'adb'命令並捕獲其輸出而不必保存它的一般意圖到一個文件是絕對好的。如果您不同意這個前提 - 討論屬於評論部分。 –

+0

謝謝你的回答! 我嘗試執行出命令,並得到它正常工作。然而,表現並不像我預期的那樣好(〜1FPS)。 所以我進一步搜索,並找到一個我可以使用的庫,這樣我就不必手動編寫所有東西 –

相關問題