2012-03-01 59 views
0

我需要能夠進行屏幕轉儲測試,並與ICS現在有一個屏幕截圖功能,可以通過按下(和按住)音量和電源按鈕來調用。 有什麼辦法通過adb來編寫這個函數嗎? (據我所知,它沒有公共的Java API)。我試圖使用Java中的KeyEvent來模擬電源和音量按鈕,並且我試圖使用adb keyevent和adb sendevent而沒有成功。我懷疑電源按鈕還會生成一些低級別的調用,這些調用不是通過上述方法生成的。是否可以從adb調用ICS屏幕截圖功能?

所以有誰知道是否有可能從adb調用函數? 如果這是不可能的,是否有人知道源代碼中這個屏幕截圖函數存在的位置?也許我可以通過閱讀來了解一些事情。

更新

用於捕捉源代碼屏幕處於 「框架/鹼/服務/ SurfaceFlinger的/服務/ SurfaceFlinger的/ SurfaceFlinger.cpp」 在一個叫做抓屏功能。我不知道是否可以從jni調用它,但我會嘗試,因爲如果我可以通過java進行屏幕截圖,那將是非常好的。

否則,@edthethird通過android.amberfog.com/?p=168有一個解決方案,它可以使用命令行進行截圖。

謝謝大家的幫助!

回答

1

那麼這與ICS無關,但是在eclipse中,請看Devices選項卡。在最右邊有一個小小的照相機圖標。 (從右至左依次爲「盒子」,「線條」,「倒置三角形」和「相機」)。點擊此攝像頭拍攝當前所選設備的屏幕截圖。

這適用於任何版本的Android,不僅ICS

Device View in DDMS Eclipse

+0

如果日食能做到這一點,那麼就必須通過亞行實現同樣的辦法。 – dmp 2012-03-01 15:31:15

+0

發現這個:http://android.amberfog.com/?p=168 – edthethird 2012-03-01 15:46:22

+0

@danp如果有一種方法可以自動執行它會很好。我無法找到如何使用ddms自動執行此操作。 – jjung 2012-03-01 16:00:54

1

看到這個問題: Screenshot of the Nexus One from adb?

基本上你可以使用亞行拉幀緩衝,並將其轉換成可用的圖像你自己,或者你可以使用谷歌提供的命令行實用程序。我想你可能會n只需稍微調整一下該實用工具即可使其在較新版本的Android上運行。正如其他答案指出的那樣,除非您嘗試自動化測試,否則從Eclipse執行此操作可能不那麼麻煩。

+0

是的,不幸的是我正在開發圖形自動測試,所以我必須能夠編寫腳本。我們使用了前面描述的方法,但是我們的新硬件不支持它,我必須找到一種新的方法來實現它。 – jjung 2012-03-01 16:04:50

+0

我一直試圖從一個應用程序內做到這一點,無濟於事。請幫助? – 2012-08-08 21:12:03

1

查看源代碼後,有一個庫正是我想要的。 frameworks \ base \ cmds \ screencap \ screencap.cpp 該程序可以通過/ system/bin/screencap在android上執行。 所以有可能通過Runtime.getRuntime()。exec();

缺點是您需要獲取截圖的特殊證書。

+0

你能解釋一下嗎?什麼特別證書?如果我嘗試: Process process = Runtime.getRuntime()。exec(「/ system/bin/screencap」); 沒有任何反應。 – 2012-08-08 21:09:48

+0

另外,如果我嘗試去做: Process process = Runtime.getRuntime()。exec(「/ system/bin/screencap -h」);並在進程的輸入流上設置一個BufferedReader,什麼都不會回來。 – 2012-08-08 21:11:03

+0

如果您檢查logcat,您可能會收到錯誤消息:「W/PackageManager(1862):未授予權限android.permission.READ_FRAME_BUFFER來封裝com.xxx.xxx(protectionLevel = 3 flags = 0x8be46) – jjung 2012-08-09 06:55:14

相關問題