Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-获取已连接android设备的屏幕截图_Java_Android_Screenshot - Fatal编程技术网

Java-获取已连接android设备的屏幕截图

Java-获取已连接android设备的屏幕截图,java,android,screenshot,Java,Android,Screenshot,我正试图编写一个java程序,捕获已连接(通过USB)android设备的当前屏幕,并将其保存在pc中。 我正在寻找任何我可以使用的图书馆或任何我可以遵循的教程。。 我在这里真的迷路了。你可能想检查一下 尝试拍摄照片并将其保存在一个单独的过程中。您可以尝试在程序中调用ADB(假设在手机上安装了USB驱动程序并获得了计算机授权): adb shell screencap-p/sdcard/screen.png adb pull/sdcard/screen.png adb shell rm/sdc

我正试图编写一个java程序,捕获已连接(通过USB)android设备的当前屏幕,并将其保存在pc中。 我正在寻找任何我可以使用的图书馆或任何我可以遵循的教程。。
我在这里真的迷路了。

你可能想检查一下


尝试拍摄照片并将其保存在一个单独的过程中。

您可以尝试在程序中调用ADB(假设在手机上安装了USB驱动程序并获得了计算机授权):

adb shell screencap-p/sdcard/screen.png

adb pull/sdcard/screen.png

adb shell rm/sdcard/screen.png

使用perl:
adb shell screencap-p|perl-pe's/\x0D\x0A/\x0A/g'>screen.png

资料来源:

您可以使用以下命令调用Java中的可执行文件:
processprocess=newprocessbuilder(“C:\\PathToExe\\MyExe.exe”、“param1”、“param2”).start()


来源:

从ADB获取设备列表

IDevice[] devices = bridge.getDevices();
然后,您可以获得具有序列号的特定设备

d.getSerialNumber()
然后捕捉屏幕

RawImage rawImage = device.getScreenshot();
将原始数据转换为图像

    BufferedImage image = new BufferedImage(rawImage.width, rawImage.height,
            BufferedImage.TYPE_INT_ARGB);

    int index = 0;
    int IndexInc = rawImage.bpp >> 3;
    for (int y = 0 ; y < rawImage.height ; y++) {
        for (int x = 0 ; x < rawImage.width ; x++) {
            int value = rawImage.getARGB(index);
            index += IndexInc;
            image.setRGB(x, y, value);
使用ddmlib.jar

资料来源:

在这里可以找到工作和图书馆。。

截图:

           ProcessBuilder processBuilderq1 = new ProcessBuilder(new String[] { "cmd.exe", "/c", "adb shell /system/bin/screencap -p /sdcard/s.png"});
           Process pq1 = processBuilderq1.start();
拉至电脑:

               ProcessBuilder processBuilderq1 = new ProcessBuilder(new String[] { "cmd.exe", "/c", "adb pull /sdcard/s.png D:\\Images\\s1.png"});
               Process pq1 = processBuilderq1.start();

这是安卓那边的,对吗??我想从java来做这件事。。我试图在没有安卓应用的情况下做到这一点。虽然这个链接可以回答这个问题,但最好在这里包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。是否有一种使用java的方法可以做到这一点?这应该可以做到:Process Process=new ProcessBuilder(“C:\\PathToExe\\MyExe.exe”、“param1”、“param2”).start();来源:像这样打电话可能有用。。。但问题是,据我所知,这段代码,我将截图保存在手机内存中,然后将截图保存到电脑上。这个过程可能需要一些时间。。在这里,我也在想时间。。我在论坛上也看到,通过亚洲开发银行需要一些时间…:(是的,当然这需要一些时间,但这取决于你的应用程序的要求,这可能会被忽略……不幸的是,在我这方面,我不知道其他检索屏幕截图的方法。对此表示抱歉。也许其他用户会知道更快的解决方案。是的……我也考虑了时间……这就是问题所在……顺便说一句,谢谢你的回答……)虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面更改,只有链接的答案可能会无效。是的,你是正确的,我没有想到…:(现在我编辑:)
               ProcessBuilder processBuilderq1 = new ProcessBuilder(new String[] { "cmd.exe", "/c", "adb pull /sdcard/s.png D:\\Images\\s1.png"});
               Process pq1 = processBuilderq1.start();