gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:16:20 25 4
gpt4 key购买 nike

我正在开发一个应用程序,您可以在其中通过蓝牙将对象数组列表发送到另一台设备。由于我是新手,我已经能够将这两个设备配对,但在发送内容时遇到问题。我遵循谷歌指南,但我很难理解它。这是代码:

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

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

最佳答案

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

正如您可能已经想象的那样,蓝牙通信由字节流组成;你不能直接发送复杂的对象,但你必须在发送之前分解它们并在接收后重新组合它们,所以你需要为你的 arraylist 对象实现一个解析例程。

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

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

关于java - 在 Android 中使用蓝牙在 2 个设备之间发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31790479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com