UWP Bluetooth RFComm ConnectAsync проблемы

Я разрабатываю приложение, которое устанавливает соединения Bluetooth (RFComm, SPP) с устройством. Мое приложение для Android работает как шарм, но с UWP у меня большие проблемы с подключением, используя:

socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);

При подключении устройства все работает. Иногда ConnectAsync занимает много времени (1 минуту) или, наконец, не работает.

Кажется, что когда я запускаю приложение, первое соединение работает и подключается в течение нескольких секунд, но все последующие соединения кажутся очень нестабильными.

Я пробовал разные USB-ключи, но с теми же результатами. У меня сейчас Win 10 Pro 64 1709.

Я также попробовал пример приложения UWP RFComm Chat. Там те же проблемы.

Есть ли у кого-то подобные проблемы? Любые идеи?

Спасибо, Йоахим.

Несколько обновлений: я протестировал несколько других ключей и SPP-устройств. Мои результаты:

  1. Один SPP Device работает, у двух такая проблема. Нерабочий пример: BluePort XP и ASUS USB-BT400

  2. Использование виртуальных COM-портов через Win32 API или .net SerialPort работает на всех устройствах!

Вывод: оборудование работает. Проблема в UWP с использованием socket.ConnectAsync! Это ошибка Win10 UWP??!!

Второе обновление:

Я узнал, что если я использую устройства из: DeviceInformationCollection collection = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));

и подключитесь с помощью rfcomm: var services = await _device.GetRfcommServicesForIdAsync(RfcommServiceId.SerialPort, BluetoothCacheMode.Uncached); var op = _socket.ConnectAsync(_service.ConnectionHostName, _service.ConnectionServiceName);

тогда у меня проблемы со временем подключения - мужественно после первой фазы подключения/отключения

НО: когда я использую виртуальные com-порты, созданные из ключей SPP

Коллекция DeviceInformationCollection = await DeviceInformation.FindAllAsync("System.Devices.InterfaceClassGuid:=\"{86E0D1E0-8089-11D0-9CE4-08003E301F73}\" И System.Devices.InterfaceEnabled:=System.StructuredQueryType.Boolean#True");

и создайте SerialDevice, используя: var serialDevice = await SerialDevice.FromIdAsync(info.Id);

который автоматически подключает цель Bluetooth при создании этого serialDevice, тогда все работает идеально.


person jstuemp    schedule 22.10.2017    source источник
comment
Я тестирую образец чата Bluetooth RFCOMM, но не могу воспроизвести вашу проблему. await chatSocket.ConnectAsync(chatService.ConnectionHostName, chatService.ConnectionServiceName); работает хорошо. Не могли бы вы рассказать нам о ваших действиях, чтобы воспроизвести проблему?   -  person Jayden    schedule 24.10.2017
comment
Привет, Джейден, пожалуйста, ознакомьтесь с моим вторым обновлением поста. Чтобы воспроизвести пример приложения: Замените это: var rfcommServices = await bluetoothDevice.GetRfcommServicesForIdAsync( RfcommServiceId.FromUuid(Constants.RfcommChatServiceUuid), BluetoothCacheMode.Uncached); с помощью: var rfcommServices = await bluetoothDevice.GetRfcommServicesForIdAsync(RfcommServiceId.SerialPort, BluetoothCacheMode.Uncached); и подключитесь к Bluetooth-устройству SPP   -  person jstuemp    schedule 24.10.2017