(Dis) Подключение устройств bluetooth с Windows.Devices.Bluetooth.Rfcomm (WP8.1)

82

Подключение и отключение устройств Bluetooth дает различные результаты на Windows Phone / Desktop 8.1. Я использовал Windows.Devices.Bluetooth.Rfcommпространство имен и пытался подключить несколько устройств с разными версиями / классами Bluetooth.

  • Версия 1.2 (Класс 1 и 2)
  • Версия 2.0 (Класс 1 и 2)
  • Версия 2.1 (Класс 1 и 2)
  • Проверено на Nokia Lumia 625 и Lumia 635, Dell Latitude E6500 и Dell Precision M6400.

Всякий раз, когда я пытаюсь подключиться к любому из устройств 2.0 или 2.1, возникают проблемы. В первый раз, когда я пытаюсь подключиться к каждому из устройств, все идет нормально, и соединение открывается. Когда я впоследствии закрываю соединение и повторно подключаю устройство, начинается проблема. Во время повторного подключения соединение никогда не откроется, и отладчик выдаст исключение System.Exception:

> Message: No further data is available.

Кроме того, при сбое подключения устройства Windows 8.1 будут продолжать попытки (безуспешно) подключиться к устройствам Bluetooth самостоятельно, даже когда мое собственное приложение завершено. Иногда устройство Windows 8.1 также показывает устройство Bluetooth как подключенное, в то время как устройство визуально показывает, что оно больше не подключено. Единственный способ повторно подключить устройство Bluetooth - разорвать с ним пару и выключить / перезапустить Bluetooth на устройстве Windows.

Всякий раз, когда я пытаюсь сделать новый вызов DeviceInformationпосле неудачного подключения, он откажется вернуть устройство, которое я ранее пытался подключить.

> Message: The service cannot be found in the specified name space.

Странный результат, устройства 1.2 работают отлично.

Файл манифеста:

<m2:DeviceCapability Name="bluetooth.rfcomm">
  <m2:Device Id="any">
    <m2:Function Type="serviceId:00001101-0000-1000-8000-00805F9B34FB"/>
  </m2:Device>
</m2:DeviceCapability>

Выбор устройства:

Guid RfcommChatServiceUuid = Guid.Parse("00001101-0000-1000-8000-00805F9B34FB");
await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(RfcommChatServiceUuid)));

Подключение: (id = chatserviceid)

StreamSocket _socket;    
RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(deviceInformation1._id);
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);

Отключение:

this._socket.Dispose();
this._socket = null;

Я исследовал MSDN, образцы кода, демонстрации, видео канала 9 и StackOverflow, ни один ресурс не может сказать мне, есть ли проблемы с Windows.Devices.Bluetooth.Rfcomm.

Есть ли кто-нибудь, кто признает эти странные результаты? Я делаю что-то неправильно?

ОБНОВЛЕНИЕ: Возможным решением является работа с Windows Phone 8.1 GDR2.

ПРИМЕЧАНИЕ. Для меня и нескольких других людей это обновление по-прежнему вызывает те же проблемы.

ggg
источник
2
Привет, gl77 - я работаю над этой проблемой в вашей учетной записи MSDN. Я обновил тему и сообщу вам, когда узнаю больше.
Мэтт Смолл,
Вы нашли для этого решение? У меня аналогичная проблема, когда он работает на одном устройстве, но не работает на другом. Одно замечание: на работающем устройстве работает драйвер Bluetooth от Intel: 17.0.1401.422, а на том, что не работает, - драйвер Bluetooth от Intel: 17.0.1405.460.
Jon H
Я пока не нашел решения, команда Мэтта все еще работает над проблемой. Будем надеяться на исправление в ближайшем будущем.
ggg
2
Производитель оборудования помог мне удалить версию 17.0.1405.460 драйверов Intel Bluetooth и установить более старую версию 17.0.1401.422. Как только мы это сделали, мое приложение снова заработало. Так что проблема для меня была в более новых драйверах.
Jon H
1
Не могли бы вы прикрепить ссылку на сообщение MSDN?
SILENT

Ответы:

1

Я бы попробовал CoolTerm и посмотрел, сработает ли это для вас. У меня была аналогичная проблема с подключением динамика с микросхемой Sigma DSP внутри через USB-соединение, поэтому, если у вас возникли проблемы с просмотром внешних устройств, возможно, устройство несовместимо с вашим компьютером. Загрузите CoolTerm и перейдите к параметрам, а в разделе «Последовательный порт» вы должны изменить свой порт на желаемое соединение (bluetooth, usb и т. Д.). Затем отредактируйте параметры по мере необходимости, перейдите в главное окно, нажмите «Подключиться» и посмотрите, работает ли это для вас.

JohnColtraneisJC
источник