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

Подключение и отключение к устройствам 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 - это возможное решение.

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

Ответ 1

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