Я пишу приложение для Android, которое подключается к устройству через Bluetooth с помощью RFCOMM.Я использую пример BluetoothChat в качестве основы для установления соединения, и в большинстве случаев все работает идеально.
Однако иногда я не могу восстановить соединение из-за сообщения о том, что сокет уже открыт:
RFCOMM_CreateConnection - уже открытое состояние: 2, состояние RFC: 4, состояние MCB: 5
Это обычно происходит, если я подключаюсь к устройству, закрываю приложение (вызываем onDestroy ()), снова открываю его и пытаюсь подключиться снова, что приводит к приведенному выше.
Iиспользуйте этот метод для подключения в ConnectThread (пример ref.BluetoothChat):
Method m = device.getClass().getMethod("createRfcommSocket",new Class[] {int.class });
tmp = (BluetoothSocket) m.invoke(device, Integer.valueOf(1));
mmSocket = tmp;
Единственное, что решает эту проблему, это выключение / включение Bluetooth телефона Android.
Это наводит меня на мысль, что сокет не закрывается в onDestroy (), но я все же призываю закрыть все потоки, как показано в предыдущем примере.
Любые идеи приветствуются.