У меня есть два приложения: одно выступает в качестве Сервера на устройстве с Android 7.1.2 (камера), а другое - в качестве Клиента в Android 7.0. (Samsung Galaxy S7). Я выполнил сопряжение, чтобы они оба появлялись в другом методе обнаружения.
Клиент делает:
...
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mmSocket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
...
mBluetoothAdapter.cancelDiscovery();
try {
mmSocket.connect();
} catch (IOException connectException) {
connectException.printStackTrace();
}
...
И Сервер делает:
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
mmServerSocket = mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord("name",UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
...
BluetoothSocket socket = null;
boolean connected = false;
// Keep listening until exception occurs or a socket is returned.
while (true) {
if(!connected) {
try {
MyLog.d(TAG, "accepting");
socket = mmServerSocket.accept();
} catch (IOException e) {
MyLog.e(TAG, "Socket's accept() method failed");
break;
}
}
...
}
Все отлично работает, когда я тестирую свои приложения на двух обычных телефонах Android, и когда я использую свой сервер в телефоне и мою камеру в качестве клиента.
Но если я попытаюсь запустить сервер в камере и клиент в телефоне, то камера застрянет в
socket = mmServerSocket.accept();
и клиент возвращает IOException в
mmSocket.connect();
java.io.IOException: чтение не удалось, сокет может быть закрыт или тайм-аут, чтение
ret: -1
Я полагаю, что это связано с тем, что камера Bluetooth не принимает подключения, но я не очень разбираюсь в этом, и все отлично работает, когда роли переключаются и камера запускает клиентское приложение.
Есть идеи?
Спасибо!