把手机变成电脑的移动触控板 (二)

把手机变成电脑的移动触控板 (一)里,介绍了手机通过socket 连接控制电脑的实现。那篇里写到了通过组播来使手机和电脑互相自动发现,本篇介绍另一种连接方式:通过手机扫描二维码的方式连接。

基本想法

因为上篇介绍过,手机要连接电脑,必须先知道电脑的ip,所以,这里的想法是:电脑端(server)程序获取自己的ip,把ip编码生成一个二维码并显示在屏幕上;手机端(client)扫描这个二维码得到电脑的ip,然后建立socket连接,剩余的控制部分同上篇。

实现

Server

server和client都是使用** zxing **的库。server端由java实现,因为上一篇介绍时,只有组播一种连接方式,现在新增一种二维码扫描的方式,所以定义了连接模式:

    // 连接模式
    private enum Mode {
        DISCOVERY, // 自动发现模式
        QR_SCAN     // 扫描连接模式
    }

在server端程序线程的run方法其实时判断连接模式:

    if (mMode == Mode.DISCOVERY) {
        try {
            // 自动发现模式,等待client发来组播
            waitForClientWave(MULTI_CAST_ADDR, LOCAL_UDP_PORT);
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    } else {
        // 扫描模式,生成并显示二维码图案
        generateAndShowQRCode();
    }

二维码的生成也是使用** zxing *,参考这个链接,稍作了修改。 createQRImage() *方法返回一个java.awt.image.BufferedImage 对象,用于界面显示。界面代码如下:

package com.mobcontrol.server.ui;

import java.awt.image.BufferedImage;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class UIFrame extends JFrame {

    /**
     * 
     */
    private static final long serialVersionUID = 1831203428568086441L;

    public void showImage(BufferedImage image) {
        if (image == null) {
            return;
        }
        this.setTitle("Mobile Control");
        this.setSize((int)(image.getWidth() * 1.5f), (int)(image.getHeight() * 1.5f));
        this.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);

        JLabel jLabel = new JLabel(new ImageIcon(image));
        JPanel jPanel = new JPanel();
        jPanel.add(jLabel);
        this.add(jPanel);
        this.setVisible(true);
    }

}

到此,server已经完成了生成并显示二维码的工作。

Client

手机端使用了** journeyapps **的这个库,是在zxing库基础之上的一次封装,封装成一个Android library project,可以在Android studio里面作为module引用。
都是开源的代码,我只是拿过来用了,就不多介绍了。总之扫描二维码解析得到其中的ip后就可以创建socket连接电脑了。

完毕,谢谢观赏

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 手机控制电脑鼠标,应用市场上已经有许多成熟的应用,但是我还是想自己来造个轮子。代码在 Github,欢迎star。...
    塘泥阅读 18,371评论 1 5
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,191评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 我想成为一个有孝心的并且能把孝心融入到实际行动中的女孩。我想把小时候爷爷奶奶给过我的陪伴,呵护,感动都在他...
    宿晴阅读 1,724评论 4 1
  • 【上一章】 01 清晨,教学楼书声琅琅。二、三年级的同学伴随着鸟叫声早起晨读,的确,清晨是人一天中记忆最好的时刻。...
    执笔添素颜阅读 3,808评论 0 0

友情链接更多精彩内容