Как создать соединение Bluetooth L2CAP между двумя устройствами? - PullRequest
0 голосов
/ 16 января 2020

Android 10 выпущена поддержка BLE Co C соединения , поэтому я хотел попробовать это, создав два простых android 10 приложения, которые соединялись бы друг с другом с помощью l2Cap и обменивались " Привет мир".

Я написал два приложения, серверное приложение и клиентское приложение, оба из которых имели все необходимые разрешения в своих файлах манифеста, и я запустил эти приложения на двух телефонах Android 10, и соединение не было установлено.

Вот соответствующая часть кода моего серверного приложения:

try {
    mServerSocket = bluetoothAdapter.listenUsingInsecureL2capChannel();
    int psm = mServerSocket.getPsm();
} catch (IOException e) {
    e.printStackTrace();
}

BluetoothSocket socket = mmServerSocket.accept();

Переменная int psm - это значение PSM, которое я использую в клиентском приложении.

Вот соответствующая часть кода моего клиентского приложения:

for (BluetoothDevice bluetoothDevice : deviceSet) {
    if (!bluetoothDevice.getName().equals(PAIRED_DEVICE_NAME)) continue;
    BluetoothDevice bd = adapter.getRemoteDevice(bluetoothDevice.getAddress());
    bluetoothSocket = bd.createInsecureL2capChannel(psm_value);
    break;
}

bluetoothSocket.connect();

, где строка PAIRED_DEVICE_NAME - это имя ожидаемого устройства, которое успешно найдено, поскольку устройства сопряжены по Bluetooth. Int psm_value - это значение PSM из серверного приложения. Я подозреваю, что это может быть проблемой, потому что я жестко запрограммировал это значение из сервера каждый раз, когда пытался проверить это (каждый раз это было другое значение, потому что это значение назначается динамически и длится до закрытия сокета сервера).

Так что мой вопрос, как получить значение удаленного PSM? И как подключить эти устройства, потому что, если я использую соединение RFCOMM, этот код работает отлично. С этим кодом я получаю сообщение об ошибке в строке bluetoothSocket.connect() из клиентского приложения:

java .io.IOException: ошибка чтения, сокет может быть закрыт или истекло время ожидания, чтение ret: -1

Спасибо!

...