簡體   English   中英

在Android中使用藍牙在2個設備之間發送數據

[英]Send data between 2 devices using Bluetooth in Android

我正在開發一個應用程序,您可以在其中將帶有藍牙的對象的arrayList發送到另一台設備。 由於這是我的新手,我已經能夠配對兩個設備,但是我無法發送內容。 我遵循了谷歌指南,但是我很難理解它。 這是代碼:

public class ServerThread implements Runnable {

    private final BluetoothServerSocket serverSocket;
    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    private final String APPNAME = "Quick";
    private final java.util.UUID UUID = java.util.UUID.fromString("aeeb5480-1c74-45e2-bfd0-f592958cba2a");
    private Handler handler;

    public ServerThread(Handler handler) {

        this.handler = handler;

        BluetoothServerSocket tmp = null;
        try {
            tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord(APPNAME, UUID);
        } catch (IOException e) {
        }
        serverSocket = tmp;
    }

    @Override
    public void run() {
        BluetoothSocket socket;
        while (true) {
            try {
                BluetoothSocket tmp;
                tmp = serverSocket.accept();
                socket = tmp;
            } catch (IOException e) {
                break;
            }
            if (socket != null) {

            }
        }

    }
}

public class ClientThread implements Runnable {

    private static final UUID UUID = java.util.UUID.fromString("aeeb5480-1c74-45e2-bfd0-f592958cba2a");
    private static BluetoothSocket socket;
    BluetoothDevice device;
    private Handler handler;

    public ClientThread(BluetoothDevice device, Handler handler) {

        this.handler = handler;

        BluetoothSocket tmp = null;
        this.device = device;
        try {
            tmp = device.createRfcommSocketToServiceRecord(UUID);
        } catch (IOException e) {
            e.printStackTrace();
        }
        socket = tmp;
    }


    @Override
    public void run() {
        if (BluetoothAdapter.getDefaultAdapter().isDiscovering()) {
            BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
        }
        try {
            socket.connect();
        } catch (IOException e) {
            try {
                socket.close();
            } catch (IOException e1) {
            }
            return;
        }

    }
    public static BluetoothSocket getSocket() {
        return socket;
    }
}

問題是我不知道如何在設備之間傳輸數據,以及我在哪里需要調用允許我執行此操作的方法。 如果有人可以幫助我,那就太好了。 謝謝

一旦獲得了服務器端BluetoothSocket,在accept()例程和客戶端的connect()方法之后,就可以開始設備之間的通信了。 為此,您需要在客戶端和服務器端都鏈接到套接字的InputStream和Outputstream對象:只需使用BluetoothSocket方法getInputStream()和getOutputStream即可獲取它們。 使用OutputStream將數據寫入通信的另一端(通過write(byte [])方法)和InputStream read()方法(如果我沒記錯的話,有3種)來收集接收到的數據。

您可能已經想象到,藍牙通信由字節流組成; 您不能直接發送復雜的對象,但是必須在發送之前分解它們,並在接收之后重新組合它們,因此由您來實現對arraylist對象的解析例程由您決定。

[ 編輯 :使用java.io,您實際上可以發送復雜的“對象”; Reader和Writer用於發送/接收字符串,而FileInputStream和FileOutputStream用於交換文件。 您甚至可以序列化對象並通過Stream發送它們。 我的答案缺乏經驗,因此請注意,存在可以簡化數據交換例程的解決方案; 只需看看java.io庫即可。]

我還建議您查看所有可以同時在Android Bluetooth API和Bluetooth體系結構上找到的所有文檔,以開發強大的應用程序! 藍牙可能很棘手。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM