在Android中使用蓝牙在2台设备之间发送数据

时间:2015-08-03 14:54:18

标签: java android arraylist android-studio bluetooth

我正在开发一个应用程序,您可以将带有蓝牙的ojects数组列表发送到另一台设备。 由于我是新手,我已经能够配对2台设备,但我无法发送内容。我跟着谷歌指南,但我很难理解它。 这是代码:

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;
    }
}

问题是我不知道如何在设备之间传输数据以及我需要调用允许我这样做的方法。如果有人可以帮助我会很棒。 感谢

1 个答案:

答案 0 :(得分:1)

一旦获得服务器端BluetoothSocket,在accept()例程之后,以及客户端一个通过connect()方法,您就可以开始在设备之间进行通信。为此,您需要在客户端和服务器端链接到套接字的InputStream和Outputstream对象:您只需使用BluetoothSocket方法getInputStream()和getOutputStream即可获得它们。使用OutputStream将数据写入通信的另一端(通过write(byte [])方法)和InputStream read()方法(有3种,如果我没记错的话)来收集接收的数据。

您可能已经想到,蓝牙通信包含字节流;你不能直接发送复杂的对象,但是你必须在发送之前对它们进行分解并在接收之后重新组合它们,因此你需要为你的arraylist对象实现一个解析例程。

[编辑:使用java.io,您实际上可以发送复杂的“对象”;读者和写者用于发送/接收字符串,而FileInputStream和FileOutputStream用于交换文件。您甚至可以序列化对象并通过Stream发送它们;我的答案缺乏经验,因此请注意,您可以使用解决方案来简化数据交换程序;只需看看java.io库。]

我还建议您查看Android蓝牙API和蓝牙架构上可以找到的所有文档,以便开发出强大的应用程序!蓝牙可能很棘手。