把手機變成電腦的移動觸控板 (二)

把手機變成電腦的移動觸控板 (一)里,介紹了手機通過socket 連接控制電腦的實現(xiàn)。那篇里寫到了通過組播來使手機和電腦互相自動發(fā)現(xiàn),本篇介紹另一種連接方式:通過手機掃描二維碼的方式連接。

基本想法

因為上篇介紹過,手機要連接電腦,必須先知道電腦的ip,所以,這里的想法是:電腦端(server)程序獲取自己的ip,把ip編碼生成一個二維碼并顯示在屏幕上;手機端(client)掃描這個二維碼得到電腦的ip,然后建立socket連接,剩余的控制部分同上篇。

實現(xiàn)

Server

server和client都是使用** zxing **的庫。server端由java實現(xiàn),因為上一篇介紹時,只有組播一種連接方式,現(xiàn)在新增一種二維碼掃描的方式,所以定義了連接模式:

    // 連接模式
    private enum Mode {
        DISCOVERY, // 自動發(fā)現(xiàn)模式
        QR_SCAN     // 掃描連接模式
    }

在server端程序線程的run方法其實時判斷連接模式:

    if (mMode == Mode.DISCOVERY) {
        try {
            // 自動發(fā)現(xiàn)模式,等待client發(fā)來組播
            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已經(jīng)完成了生成并顯示二維碼的工作。

Client

手機端使用了** journeyapps **的這個庫,是在zxing庫基礎(chǔ)之上的一次封裝,封裝成一個Android library project,可以在Android studio里面作為module引用。
都是開源的代碼,我只是拿過來用了,就不多介紹了??傊畳呙瓒S碼解析得到其中的ip后就可以創(chuàng)建socket連接電腦了。

完畢,謝謝觀賞

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 手機控制電腦鼠標(biāo),應(yīng)用市場上已經(jīng)有許多成熟的應(yīng)用,但是我還是想自己來造個輪子。代碼在 Github,歡迎star。...
    塘泥閱讀 18,443評論 1 5
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 我想成為一個有孝心的并且能把孝心融入到實際行動中的女孩。我想把小時候爺爺奶奶給過我的陪伴,呵護,感動都在他...
    宿晴閱讀 271評論 4 1
  • 【上一章】 01 清晨,教學(xué)樓書聲瑯瑯。二、三年級的同學(xué)伴隨著鳥叫聲早起晨讀,的確,清晨是人一天中記憶最好的時刻。...
    執(zhí)筆添素顏閱讀 701評論 0 0

友情鏈接更多精彩內(nèi)容