Поставить в очередь запрос на соединение Bluetooth и принять его одновременно

В моем приложении Android я могу принять запрос на соединение, отправленный с устройства BT (профиль SPP). эти устройства BT периодически отправляют запрос на подключение, и приложение принимает его. Но теперь моя проблема в том, что я могу подключиться к нескольким устройствам, но хочет периодически связываться с сопряженными устройствами. так что я хочу разъяснений по этому вопросу. Если приложение обменивается данными с одним устройством, и в то же время другое устройство отправляет запрос на подключение, могу ли я принять этот запрос на подключение через мое приложение с помощью BluetoothServerSocket? Как?

2 ответа

Решение

Сервер Bluetooth может обслуживать до 7 различных клиентов Bluetooth, вам необходимо создать сокет сервера Bluetooth в отдельном потоке, и каждый раз, когда клиент подключается, отправлять этого клиента в новый поток и возвращаться в состояние прослушивания. Вы можете использовать следующий псевдокод

BluetoothServerSocket serverSocket =  BluetoothAdapter.listenUsingRfcommWithServiceRecord();
while(running){
    BluetoothSocket client = serverSocket.accept(); //blocks untel a client is connected
    sendClientToHisThread(client);
}

private void sendClientToHisThread(final BluetoothSocket socket){
     Thread thread = new Thread(new Runnable(){
@Override
public void run(){
   // communicate with client
      socket.close();
 }
});
    thread.start();
 }

Я думаю, что вы можете следовать линии на примере BluetoothChat, имея поток, прослушивающий входящие соединения, но, в вашем случае, когда соединение установлено, вы не закрываете сокет сервера.

Другие вопросы по тегам