简单实现通过电脑操作手机

通过电脑操作手机,支持单击,拖抓事件,延时有1-2秒。

具体步骤:

1、从手机截图到sdcard

2、将图片导出到PC

3、从PC加载展示图片

4、开启定时器

5、设置点击、滚动事件

1、

    private static void takeScreenshot(String path) {
        long t1 = System.currentTimeMillis();
        String command = "adb devices"; // 替换为你需要执行的shell命令
        String command1 = "adb shell screencap -p /sdcard/screencap.png"; // 替换为你需要执行的shell命令
        String command2 = "adb pull /sdcard/screencap.png " + path; // 替换为你需要执行的shell命令
        String command3 = "adb shell rm /sdcard/screencap.png"; // 替换为你需要执行的shell命令
        String command4 = "rm -rf " + path; // 替换为你需要执行的shell命令
        try {
//            Process process = Runtime.getRuntime().exec(command);
            Process process1 = Runtime.getRuntime().exec(command1);
            Process process2 = Runtime.getRuntime().exec(command2);
            Process process3 = Runtime.getRuntime().exec(command3);
//            Process process4 = Runtime.getRuntime().exec(command4);

//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(process1.getInputStream()));
                String line;
                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process2.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process3.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }
//            {
//                BufferedReader reader = new BufferedReader(new InputStreamReader(process4.getInputStream()));
//                String line;
//                while ((line = reader.readLine()) != null) {
//                    System.out.println(line);
//                }
//            }

            long t2 = System.currentTimeMillis();
            System.out.println("takeScreenshot Exited with code: 时间:" + (t2 - t1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2、

static BufferedImage getImage(String folderPath) {
    long t1 = System.currentTimeMillis();
    File folder = new File(folderPath);
    File[] listOfFiles = folder.listFiles();
    BufferedImage bufferedImage = null;
    for (File file : listOfFiles) {
        if (file.isFile() && file.getName().toLowerCase().endsWith(".png") || file.getName().toLowerCase().endsWith(".jpg") || file.getName().toLowerCase().endsWith(".jpeg")) {
            try {
                bufferedImage = ImageIO.read(file);
                // 1080*2340
                screenW = bufferedImage.getWidth();
                screenH = bufferedImage.getHeight();
                System.out.println("getImage " + bufferedImage.getWidth() + " " + bufferedImage.getHeight());
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                long t2 = System.currentTimeMillis();
                System.out.println("getImage : 时间:" + (t2 - t1));
                return bufferedImage;
            }
        }
    }
    return null;
}

3、

 static JFrame jFrame;
    static JLabel jLabel;
    static int screenW;
    static int screenH;
    static int scale = 3;

    static void showFrame(BufferedImage screenFullImage) {
        // 1080*2340
        jFrame = new JFrame("Screen Capture");
        jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jLabel = new JLabel("");
        //设置标签大小,这种可以设计成自己想要大小
        int windW = screenW / 3;
        int windH = screenH / 3;
        scale = 3;
        jLabel.setBounds(0, 0, windW, windH);//
        //86 212
        //28 63
        //将图片进行转换添加到标签当中  这个是工具类,具体参考下面给出代码
        setImgSize(screenFullImage, jLabel);
        jFrame.add(jLabel);
        jFrame.pack();
//        frame.setSize(300,600);     // 设置JFrame的尺寸
        jFrame.setVisible(true);
        addMouseListener(jLabel);

    }

4、

private static final int DELAY = 400; // 帧间隔,单位毫秒

public static void main(String[] args) {
    String path = "/Users/Desktop/command/png2";
    takeScreenshot(path);
    BufferedImage image = getImage(path);
    showFrame(image);
    Timer timer = new Timer(DELAY, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            System.out.println("actionPerformed");
            takeScreenshot(path);
            BufferedImage screenFullImage = getImage(path);
            setImgSize(screenFullImage, jLabel);
        }
    });
    timer.start();
}

5、

 /**
     * 添加单击事件
     *
     * @param jLabel
     */
    private static void addMouseListener(JLabel jLabel) {
        jLabel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                onMouseClicked(e);
            }

            @Override
            public void mousePressed(MouseEvent e) {
                super.mousePressed(e);
                System.out.println("mousePressed");
                xPress = e.getX();
                yPress = e.getY();

            }

            @Override
            public void mouseReleased(MouseEvent e) {
                super.mouseReleased(e);
                isMouseDragged = false;
//                System.out.println("mouseReleased isMouseDragged==" + isMouseDragged);
            }

            @Override
            public void mouseEntered(MouseEvent e) {
                super.mouseEntered(e);
//                System.out.println("mouseEntered");
            }

            @Override
            public void mouseExited(MouseEvent e) {
                super.mouseExited(e);
//                System.out.println("mouseExited");
            }
        });

        jLabel.addMouseMotionListener(new MouseMotionListener() {

            @Override
            public void mouseDragged(MouseEvent e) {
                System.out.println("mouseDragged addMouseMotionListener " + e.getY());
                isMouseDragged = true;
                xEndPress = e.getX();
                yEndPress = e.getY();
                onMouseDragged(e);
            }

            @Override
            public void mouseMoved(MouseEvent e) {
//                System.out.println("mouseMoved addMouseMotionListener");
            }
        });
        jLabel.addMouseWheelListener(new MouseWheelListener() {
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) {
//                System.out.println("mouseWheelMoved addMouseWheelListener "+e.getY());
            }
        });

    }

    static int xPress;
    static int yPress;
    static int xEndPress;
    static int yEndPress;
    static boolean isMouseDragged = false;

    private static void onMouseDragged(MouseEvent mouseEvent) {
        System.out.println("onMouseDragged " + mouseEvent.getX() + " " + mouseEvent.getY());
        if (Math.abs(yEndPress - yPress) < 20 * scale) {
            return;
        }
        //adb shell input touchscreen draganddrop <x1> <y1> <x2> <y2>
        //adb shell input swipe 250 250 300 300
        String command = "adb shell input swipe " + xPress * scale + " " + yPress * scale + " " + xEndPress * scale + " " + yEndPress * scale;
        System.out.println("commond==" + command);
        Process process;
        try {
            process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static void onMouseClicked(MouseEvent mouseEvent) {
        if (isMouseDragged) {
            return;
        }
        System.out.println("onMouseClicked " + mouseEvent.getX() + " " + mouseEvent.getY());
        float TARGET_X = mouseEvent.getX() * scale;
        float TARGET_Y = mouseEvent.getY() * scale;
        System.out.println("onMouseClicked " + TARGET_X + " " + TARGET_Y);
        //adb shell input tap 250 250
        String command = "adb shell input tap " + TARGET_X + " " + TARGET_Y;
        // 使用adb shell输入命令模拟点击
        // adb shell input tap $TARGET_X $TARGET_Y
        Process process;
        try {
            process = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

6、

相关推荐
AORO_BEIDOU1 天前
迈入国际舞台,AORO M8防爆手机获国际IECEx、欧盟ATEX防爆认证
5g·安全·智能手机·信息与通信
ueotek1 天前
Ansys Zemax | 手机镜头设计 - 第 4 部分:用LS-DYNA进行冲击性能分析
智能手机·ansys·zemax·光学
2401_852403551 天前
高效管理iPhone存储:苹果手机怎么删除相似照片
ios·智能手机·iphone
西瓜本瓜@1 天前
在Android开发中如何使用OCR获取当前屏幕中的文本?
android·java·开发语言·智能手机·ocr
hgdlip1 天前
手机的ip地址是固定的吗?多角度深入探讨
网络·tcp/ip·智能手机
AORO_BEIDOU1 天前
热成像手机VS传统热成像仪:AORO A23为何更胜一筹?
人工智能·5g·安全·智能手机·信息与通信
番茄小酱0012 天前
ReactNative中实现图片保存到手机相册
react native·react.js·智能手机
shujuwa663 天前
Mac电脑技巧:适用于Mac的免费外置硬盘数据恢复软件
android·windows·macos·智能手机·电脑·开源软件
shujuwa663 天前
5个有效的华为(HUAWEI)手机数据恢复方法
windows·华为·智能手机·电脑·开源软件
shujuwa663 天前
在不丢失数据的情况下解锁锁定的 Android 手机的 4 种方法
android·windows·智能手机·电脑·开源软件