Я наконец понял, что я делаю не так. Очевидно, всякий раз, когда вы вызываете метод accept из BluetoothServerSocket и возвращаете сокет, вы должны закрыть этот сокет перед повторным вызовом accept.
Я обошел эту проблему, чтобы создать нужную пикосеть, создав 7 различных UUID и используя BluetoothServerSocket для прослушивания и приема соединения для каждого этих UUID. Как только я получаю соединение для определенного UUID, я закрываю соответствующий сокет сервера и снова открываю другой для следующего UUID.
Следующий фрагмент иллюстрирует идею, которую я получил от BTClickLinkCompete .
for (int i = 0; i < 7; i++) {
BluetoothServerSocket myServerSocket = mBtAdapter
.listenUsingRfcommWithServiceRecord(srcApp, mUuid.get(i));
BluetoothSocket myBSock = myServerSocket.accept();
myServerSocket.close(); // Close the socket now that the connection
//has been made
//Do stuff with the socket here, like callback to main thread
}
Здесь mUuid - это массив, в котором хранятся 7 различных uuids. Клиенты, пытающиеся подключиться к серверу, также будут обладать этими uuids и будут пробовать их один за другим по порядку, потому что они не знают число клиентов, уже подключенных к серверу.