当前位置: 首页 > article >正文

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

通过电脑操作手机,支持单击,拖抓事件,延时有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、


http://www.kler.cn/news/356873.html

相关文章:

  • 【优选算法】探索双指针之美(一):双指针与单调性的完美邂逅
  • MySQL 异常: “Host ‘xxx‘ is not allowed to connect to this MySQL server“
  • IMX6UL的RGB的显示实验
  • 一起搭WPF架构之LiveCharts.Wpf的简单了解与安装
  • 微信小程序-封装通用模块
  • Mac 远程 Windows 等桌面操作系统工具 Microsoft Remote Desktop for Mac 下载安装详细使用教程
  • 《仓库猎手模拟》风灵月影游戏辅助使用教程
  • 数据库原理与应用(基于MySQL):实验六数据查询
  • 【Golang】Go语言http编程底层逻辑实现原理与实战
  • 大数据治理:技术挑战与解决方案
  • 免杀对抗—内存加载UUID标识IPV4地址MAC地址
  • webpack自定义插件 ChangeScriptSrcPlugin
  • 结合seata和2PC,简单聊聊seata源码
  • 暴雨讲堂:AI已成为交叉学科科研工具
  • 监督学习、无监督学习、半监督学习、强化学习、迁移学习、集成学习分别是什么对应什么应用场景
  • Facebook Marketplace无法使用的原因
  • 【Bootstrap】bootstrap-table 的打印按钮功能正常但缺失图标
  • python爬虫加解密分析及实现
  • OSI参考模型与TCP/IP模型
  • 《深空彼岸》TXT完整版下载,知轩藏书校对版!