Я получил следующее от этого сообщения группы Google от Кристофера Микински .Надеюсь, это поможет.
Я считаю, что ключ к тому, чтобы заставить это работать, находится в списке mUuid
.
Внимательно посмотрите на то, что это делает:
for (int i = 0; i < Connection.MAX_SUPPORTED && myBSock == null; i++) {
for (int j = 0; j < 3 && myBSock == null; j++) {
myBSock = getConnectedSocket(myBtServer, mUuid.get(i));
if (myBSock == null) {
try {
Thread.sleep(200);
} catch (InterruptedException e) {
Log.e(TAG, "InterruptedException in connect", e);
}
}
}
}
Что этот код выглядит для подключения к устройству, но как он это делает?Он пробует сокет несколько раз, используя несколько UUID для сеанса.
По сути это означает, что мы можем использовать UUID только один раз .Таким образом, вместо этого приложение реализует с использованием семи UUID, затем сервер прослушивает и принимает каждый UUID на стороне сервера, это то, что делается с помощью следующего кода:
for (int i = 0; i < Connection.MAX_SUPPORTED && maxConnections > 0; 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.
String address = myBSock.getRemoteDevice().getAddress();
mBtSockets.put(address, myBSock);
mBtDeviceAddresses.add(address);
Thread mBtStreamWatcherThread = new Thread(new BtStreamWatcher(address));
mBtStreamWatcherThread.start();
mBtStreamWatcherThreads.put(address, mBtStreamWatcherThread);
maxConnections = maxConnections - 1;
if (mCallback != null) {
mCallback.incomingConnection(address);
}
}
Теперь, нас клиентской стороны что сделано?Клиент не знает, сколько активных соединений сервер имеет в настоящее время.
Если у нас есть какой-то согласованный порядок, который должны использовать клиенты, мы можем просто использовать это, однако, в нашем случае, мы просто просто пытаемся каждый UUID в последовательности, пока мы "не найдем правильноеone. "
Короткая версия: - Используйте несколько UUID, вы можете использовать только один UUID.Поэтому определите семь (максимум для использования пикосети) и пробуйте каждый, пока не найдете правильный.