【问题标题】:Java - Get a screenshot of connected android deviceJava - 获取已连接安卓设备的屏幕截图
【发布时间】:2017-02-20 17:19:09
【问题描述】:

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

【问题讨论】:

    标签: java android screenshot


    【解决方案1】:

    从 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);
    

    最后保存图片

    ImageIO.write(image, "png", new File(filepath));
    

    使用 ddmlib.jar

    来源: https://github.com/miracle2k/android-platform_sdk/blob/master/screenshot/src/com/android/screenshot/Screenshot.java

    工作和图书馆可以在这里找到.. http://www.java2s.com/Code/Jar/d/Downloadddmlibjar.htm

    【讨论】:

    • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
    • 是的,你是对的,我没想到...:(现在我编辑了:)
    【解决方案2】:

    截图:

               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();
    

    【讨论】:

      【解决方案3】:

      您可能想检查一下。 How to programmatically take a screenshot in Android?

      尝试拍照并将其保存在单独的进程中。

      【讨论】:

      • 这是安卓端的吧??我想从 java 中做到这一点。我试图在没有 android 应用程序的情况下做到这一点。
      • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会失效。
      【解决方案4】:

      你可以尝试在你的程序中调用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' &gt; screen.png

      来源:here

      您可以使用 Java 调用可执行文件: Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();

      来源:Java Programming: call an exe from Java and passing parameters

      【讨论】:

      • 有没有办法用java做到这一点??
      • 这应该可以工作: Process process = new ProcessBuilder("C:\\PathToExe\\MyExe.exe","param1","param2").start();来源:stackoverflow.com/questions/5604698/…
      • 这样的调用可能会起作用......但问题是,据我了解这段代码,这里我将屏幕截图保存在手机内存中,然后将其保存到电脑中......这个过程可能需要一些时间..这里我也在考虑时间..而且我在一个论坛上看到,说通过亚行需要一些时间......:(
      • 是的,这肯定需要一些时间,但这取决于您的应用程序的要求,这可能可以忽略不计......不幸的是,在我这边,我不知道其他检索屏幕截图的方法。对于那个很抱歉。也许其他用户会知道更快的解决方案。
      • 是的..我也在考虑时间......这就是问题......顺便说一句谢谢你的回答......:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 2019-10-12
      相关资源
      最近更新 更多