我想知道,有谁知道如何在同一应用程序中连接到两个蓝牙 SPP 设备? 我查看了BluetoothChat
示例,但是,它没有提供有关如何连接到两个蓝牙SPP设备的任何信息。 我似乎在其他地方也找不到太多信息。
假设我们有两个蓝牙设备 B 和 C。为了连接它们,我们需要
-
蓝牙插座,每个设备一个。
-
用于发送消息的输入和输出流。
连接参数: { 蓝牙设备(MAC 地址(, UUID }
要拥有多个连接,我们必须创建专用于连接的这些连接参数。
此线程位于我的服务类中。
首先,绑定服务并在服务类中创建一个方法,如下所示, 调用此方法并传递蓝牙 MAC 地址。它将在后台连接。对于第二个设备,也遵循类似的过程。
public synchronized void connectToDevice(String macAddress){
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(macAddress);
if (mState == STATE_CONNECTING){
if (mConnectThread != null){
mConnectThread.cancel();
mConnectThread = null;
}
}
if (mConnectedThread != null){
mConnectedThread.cancel();
mConnectedThread = null;
}
mConnectThread = new ConnectBtThread(device);
toast("connecting");
mConnectThread.start();
setState(STATE_CONNECTING);
}
在这里,我正在创建线程类以在后台连接和运行
private class ConnectBtThread extends Thread{
private final BluetoothSocket mSocket;
private final BluetoothDevice mDevice;
public ConnectBtThread(BluetoothDevice device){
mDevice = device;
BluetoothSocket socket = null;
try {
socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString(B_UUID));
} catch (IOException e) {
e.printStackTrace();
}
mSocket = socket;
}
@Override
public void run() {
if (mBluetoothAdapter.isDiscovering()){
mBluetoothAdapter.cancelDiscovery();
}
try {
mSocket.connect();
Log.d("service","Bluetooth one running (connected)");
SharedPreferences pre = getSharedPreferences("BT_NAME",0);
pre.edit().putString("bluetooth_connected",mDevice.getName()).apply();
int i = 0;
Log.d("service","one + " +i++);
} catch (IOException e) {
try {
mSocket.close();
Log.d("service","connect thread run method ( close function)");
} catch (IOException e1) {
e1.printStackTrace();
}
e.printStackTrace();
}
connected(mSocket);
}
public void cancel(){
try {
mSocket.close();
//Toast.makeText(getApplicationContext(),"Failed to connect one",Toast.LENGTH_SHORT).show();
Log.d("service","connect thread cancel method");
} catch (IOException e) {
e.printStackTrace();
}
}
}
与此类似,再创建一个方法和线程类,以使两个蓝牙设备都处于"已连接"状态。 我遵循了这个,它对我来说工作得很好。