【问题标题】:Send data between 2 devices using Bluetooth in Android在 Android 中使用蓝牙在 2 台设备之间发送数据
【发布时间】:2015-10-25 17:57:31
【问题描述】:

我正在开发一个应用程序,您可以在其中将带有蓝牙的对象数组列表发送到另一台设备。 由于我是新手,我已经能够配对 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;
    }
}

问题是我不知道如何在设备之间传输数据以及我需要在哪里调用允许我这样做的方法。如果有人可以帮助我,那就太好了。 谢谢

【问题讨论】:

  • 您必须使用BluetoothSocket 对象(它的工作方式类似于Java 标准库中的Socket 对象)。您必须在 run 函数中这样做

标签: java android arraylist android-studio bluetooth


【解决方案1】:

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

正如您可能已经想象的那样,蓝牙通信由字节流组成;您不能直接发送复杂的对象,但您必须在发送之前分解它们并在接收后重新组合它们,因此由您来为您的数组列表对象实现解析例程。

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

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

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多