
[英]Bluetooth LE send string data between Android devices via application
[英]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.