2011-04-19 22 views
1

我使用這個下面的腳本採取截圖:截圖與monkeyrunner在Android

def snap(): 
    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice 
    print "Waiting for device.." 
    device = MonkeyRunner.waitForConnection() 
    print "Device found.." 
    result = device.takeSnapshot() 
    print "Clicked.." 
    now = datetime.datetime.now() 
    file = "C:\\Workspace\\"+now.strftime("%d%m%Y-%H%M%S")+".png" 
    result.writeToFile(file,'png') 
    print file 

我已經把這個while循環,它的一個截圖正常工作。但之後,一個截圖,輸出掛起像這樣infintely:

C:\Program Files\Android\android-sdk\tools>monkeyrunner C:\Workspace\snap.py 
Click (y/n)?y 
User said: y 
Calling function.. 
Waiting for device.. 
Device found.. 
Clicked.. 
C:\Workspace\19042011-155124.png 
Click (y/n)?y 
User said: y 
Calling function.. 
Waiting for device.. 

如何讓代碼阻止並保持截圖?這是設備內存問題嗎?

回答

2

device = MonkeyRunner.waitForConnection()移出循環並保持與設備的連接處於打開狀態。

+0

dtmilano - 有沒有一種方法可以在連接成功之後刪除連接? – fixxxer 2011-04-20 07:22:35

+0

添加另一個答案,以獲得良好格式化的代碼 – 2011-04-21 00:21:47

0

要強制斷開連接,您可能會終止進程。不優雅,但沒有辦法從monkeyrunner關閉連接。

... 
pid = int(filter(lambda p: len(p) == 9 and p[8] == 'com.android.commands.monkey', map(lambda l: l.split(), device.shell('ps').splitlines()))[0][1]) 
print "killing %s" % pid 
device.shell("kill %d" % pid) 
device = None 
... 
0

我寧願monkeyrunner腳本外殼使用adb pull命令這樣

 
os.system('adb pull /dev/graphics/fb0 image') 
subprocess.call('ffmpeg -vframes 1 -vcodec rawvideo -loglevel quiet -f rawvideo -pix_fmt rgba -s 480x854 -i image -f image2 -vcodec png image.png') 

注:它使用的ffmpeg將原始數據轉換成PNG文件。 FFMPEG應該在路徑
這樣做是因爲經常需要takenapshot()API運行異常。
480x854是設備分辨率,根據您的設備進行更改。
通過這種方法,我能夠拍攝一系列快照。

如果你對device.takesnapshot()感興趣,試着在兩者之間添加time.sleep(),這可能會有所幫助。