6

使用uiautomatortakeScreenshot(File storePath)时,无论我传入什么参数,总是返回 false。

我试图给new File(dir_name, file_name)or new File(file_name),它们都不起作用(如果 dir_name 不存在,当然首先 mkdir )。

每次它只返回 false 并且模拟器上的/data/local/tmp/是空的。

顺便说一句,我认为这不是权限问题,因为尝试类似dumpWindowHierarchy可能会在那里生成转储文件。

在此先感谢您的帮助。

4

2 回答 2

7

如果您使用模拟器运行测试,您应该在 AVD 配置中打开“使用主机 GPU”。在此更改之后,它对我有用。

如果您仍然遇到问题,您可以尝试截屏。它是用于截屏的命令行工具。它适用于两种模拟器设置。要将屏幕截图保存在给定路径中,请执行:

Process process = Runtime.getRuntime().exec("screencap <path>");
process.waitFor();

使用/data/local/tmp来避免权限问题。您也可以使用 SD 卡目录。它是异步的,所以等待进程用 waitFor() 完成。它将通过提供的文件的扩展名来识别所需的输出格式。

或者您可以在 InputStream 中获取 PNG(无需等待):

Process process = Runtime.getRuntime().exec("screencap -p");
InputStream output = new BufferedInputStream(process.getInputStream());

如果您希望以 JPEG 格式获取文件,则可以省略 -p。它们的 JPEG 屏幕截图更大,但获取它们所需的时间更少。

于 2013-01-21T17:20:47.647 回答
3

takeScreenshot() 方法适用于 4.2 及以上安卓版本设备

如果设备版本合适,则使用以下代码

File path = new File("/sdcard/filename.png");
    int SDK_VERSION = android.os.Build.VERSION.SDK_INT; 
    if (SDK_VERSION >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
        mUiAutomatorTestCase.getUiDevice().takeScreenshot(PATH);
    }

我们可以通过以下命令查看文件

$ adb shell ls -l /sdcard/name-of-file
于 2013-12-20T07:13:44.317 回答