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