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
Спасибо!