如何使用 SPP 连接多个蓝牙设备?
How to connect Multiple Bluetooth Device by using SPP?
我正在创建一个 Android 应用程序,它可以连接两个 BT 设备并通过 SPP 进行通信。要创建这样的应用程序,我遵循简单的逻辑。
我得到了 BT 设备的两个 mac 地址,所以在 for 循环中,我按如下方式连接 BT 设备:
private void connect() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String[] strDevice = deviceAddress.split(",");
BluetoothDevice device = null;
String currentConnection;
String deviceName = "";
try {
disconnect();
Thread.sleep(500);
for (String item: strDevice) {
Log.d(TAG,"item is: " + item + " size is: " + strDevice.length);
currentConnection = item;
device = bluetoothAdapter.getRemoteDevice(item);
deviceName = device.getName() != null ? device.getName() : device.getAddress();
status("connecting..." + item);
connected = Connected.Pending;
socket = new SerialSocket();
service.connect(this, "Connected to " + deviceName);
socket.connect(getContext(), service, device);
Thread.sleep(500);
}
} catch (Exception e) {
onSerialConnectError(e);
}
}
使用上面的代码,我可以连接两个 BT 设备。但问题是当我关闭 activity 时我断开了它们,但当时只有一个设备断开连接。我在片段的 "OnDestroy" 上调用断开连接:
@Override
public void onDestroy() {
if (connected != Connected.False) {
disconnect();
}
getActivity().stopService(new Intent(getActivity(), SerialService.class));
super.onDestroy();
}
void disconnect() {
listener = null; // ignore remaining data and errors
connected = false; // run loop will reset connected
if(socket != null) {
try {
socket.close();
} catch (Exception ignored) {
}
socket = null;
}
try {
context.unregisterReceiver(disconnectBroadcastReceiver);
} catch (Exception ignored) {
}
}
我需要帮助来找出为什么在断开连接时,只有一个设备断开连接?我是否需要关闭两个套接字,因为在连接期间它为两个设备打开了 2 个套接字?如果是,如何关闭两个套接字?
提前致谢
解决方法如下:
上面描述的问题是在套接字断开连接时,只有一个 BT 设备正在断开连接。为了解决这种情况,我所做的是,无论何时创建和连接套接字,我都将其保存在并发列表中。
所以当断开连接发生时,我断开了列表中所有已连接的套接字。这样它会断开所有 BT 设备。
谢谢。
我正在创建一个 Android 应用程序,它可以连接两个 BT 设备并通过 SPP 进行通信。要创建这样的应用程序,我遵循简单的逻辑。
我得到了 BT 设备的两个 mac 地址,所以在 for 循环中,我按如下方式连接 BT 设备:
private void connect() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
String[] strDevice = deviceAddress.split(",");
BluetoothDevice device = null;
String currentConnection;
String deviceName = "";
try {
disconnect();
Thread.sleep(500);
for (String item: strDevice) {
Log.d(TAG,"item is: " + item + " size is: " + strDevice.length);
currentConnection = item;
device = bluetoothAdapter.getRemoteDevice(item);
deviceName = device.getName() != null ? device.getName() : device.getAddress();
status("connecting..." + item);
connected = Connected.Pending;
socket = new SerialSocket();
service.connect(this, "Connected to " + deviceName);
socket.connect(getContext(), service, device);
Thread.sleep(500);
}
} catch (Exception e) {
onSerialConnectError(e);
}
}
使用上面的代码,我可以连接两个 BT 设备。但问题是当我关闭 activity 时我断开了它们,但当时只有一个设备断开连接。我在片段的 "OnDestroy" 上调用断开连接:
@Override
public void onDestroy() {
if (connected != Connected.False) {
disconnect();
}
getActivity().stopService(new Intent(getActivity(), SerialService.class));
super.onDestroy();
}
void disconnect() {
listener = null; // ignore remaining data and errors
connected = false; // run loop will reset connected
if(socket != null) {
try {
socket.close();
} catch (Exception ignored) {
}
socket = null;
}
try {
context.unregisterReceiver(disconnectBroadcastReceiver);
} catch (Exception ignored) {
}
}
我需要帮助来找出为什么在断开连接时,只有一个设备断开连接?我是否需要关闭两个套接字,因为在连接期间它为两个设备打开了 2 个套接字?如果是,如何关闭两个套接字?
提前致谢
解决方法如下:
上面描述的问题是在套接字断开连接时,只有一个 BT 设备正在断开连接。为了解决这种情况,我所做的是,无论何时创建和连接套接字,我都将其保存在并发列表中。
所以当断开连接发生时,我断开了列表中所有已连接的套接字。这样它会断开所有 BT 设备。
谢谢。