Мне было интересно, кто-нибудь знает, как подключиться к двум устройствам Bluetooth SPP в одном приложении? Я просмотрел пример BluetoothChat
, однако он не дает никакой информации о том, как подключиться к двум устройствам Bluetooth SPP. Я не могу найти много информации в другом месте.
Как подключить два устройства Bluetooth SPP в одном приложении?
Ответы (2)
Предположим, у нас есть два Bluetooth-устройства B и C. Чтобы их подключить, нам нужно
Разъемы Bluetooth, по одному на каждое устройство.
Входные и выходные потоки для отправки сообщений.
Параметры подключения: { Устройство Bluetooth (MAC-адрес), UUID}
Чтобы иметь несколько соединений, мы должны создать эти параметры соединения, предназначенные для соединения.
Этот поток находится внутри моего класса обслуживания.
Во-первых, свяжите службу и создайте метод в классе обслуживания, подобный этому, вызовите этот метод и передайте MAC-адрес Bluetooth. он будет подключаться в фоновом режиме. для второго устройства также выполните аналогичную процедуру.
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);
}
Здесь я создаю класс Thread для подключения и запуска в фоновом режиме.
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();
}
}
}
Аналогично этому создайте еще один метод и класс потока, чтобы оба устройства Bluetooth оставались в состоянии «Подключено». Я следовал за этим, и он отлично работает для меня.