0

android代码运行cmd命令截屏

adb shell /system/bin/screencap -p /sdcard/screenshot.png(保存到SDCard)
adb pull /sdcard/screenshot.png d:/screenshot.png(保存到电脑)
$ adb shell screencap -p /sdcard/screen.png
$ adb pull /sdcard/screen.png
$ adb shell rm /sdcard/screen.png

截图直接保存到电脑

$ adb shell screencap -p | sed 's/\r$//' > screen.png
上一个命令没有成功(mac下)
下面这个命令成功了
adb shell screencap -p | perl -pe 's/\x0D\x0A/\x0A/g' > screen.png
执行adb shell 将\n转换\r\n, 因此需要用sed删除多余的\r

如果直接当命令用还可以用 alias 包裝装起來:

$ alias and-screencap="adb shell screencap -p | sed 's/\r$//'"
$ and-screencap > screen.png

以后就可以方便的用and-screencap > 直接将截图保存到电脑上了
在android代码中使用adb命令来截屏

直接在PC上cmd下可调用adb shell screencap -p /sdcard/screenshot.png来截屏,截取到的内容将包括在线视频等原本需要单独处理的内容。

使用过在ondraw()里面获取cache或者view来截取屏幕,但那样无法获取在线视频内容,但是通过在PC上调用adb命令,可以截取屏幕,因此想到在android代码中运行cmd里面的命令行,将图片保存起来即可。

下面的只是初步代码,适用于有root权限的机器(暂时没有时间尝试在没有root权限的情况调用,有兴趣的可以自己尝试)

这段代码的缺陷在于无法获知什么时候截取完毕屏幕的内容、什么时候保存,因此,我的做法是延时2s去读取指定文件夹下的这个文件。如果有知道解决的,请在后面回复中贴出,让大家一起进步
public static void savecreen(Activity ac, String name) {
        String cmd=”screencap -p /sdcard/”+name+”.png”;
        try {
            // 权限设置
            Process p = Runtime.getRuntime().exec(“su”);
            // 获取输出流
            OutputStream outputStream = p.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(
                    outputStream);
            // 将命令写入
            dataOutputStream.writeBytes(cmd);
            // 提交命令
            dataOutputStream.flush();
            // 关闭流操作
            dataOutputStream.close();
            outputStream.close();
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

天边的星星