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