Łączenie się i rozłączanie z urządzeniami Bluetooth dawało różne rezultaty w systemie Windows Phone / Desktop 8.1. I zostały z wykorzystaniem Windows.Devices.Bluetooth.Rfcomm
nazw i starałem się połączyć kilka urządzeń Bluetooth z różnych wersji / klas.
- Wersja 1.2 (klasa 1 i 2)
- Wersja 2.0 (klasa 1 i 2)
- Wersja 2.1 (klasa 1 i 2)
- Testowano na telefonach Nokia Lumia 625 i Lumia 635, Dell Latitude E6500 i Dell Precision M6400.
Zawsze, gdy próbuję połączyć się z jednym z urządzeń 2.0 lub 2.1, pojawiają się problemy. Za pierwszym razem, gdy próbuję połączyć się z każdym z urządzeń, wszystko pójdzie dobrze i połączenie się otworzy. Kiedy później zamykam połączenie i ponownie podłączam urządzenie, zaczyna się problem. Podczas ponownego łączenia połączenie nigdy się nie otworzy, a debugger wyrzuci System.Exception:
> Message: No further data is available.
Ponadto, jeśli połączenie nie powiedzie się, urządzenia z systemem Windows 8.1 będą próbować (bezskutecznie) samodzielnie połączyć się z urządzeniami Bluetooth, nawet jeśli moja własna aplikacja zostanie zamknięta. Czasami urządzenie z systemem Windows 8.1 pokazuje również urządzenie Bluetooth jako podłączone, podczas gdy urządzenie wizualnie pokazuje, że nie jest już podłączone. Jedynym sposobem ponownego połączenia urządzenia Bluetooth jest anulowanie sparowania i wyłączenie / ponowne uruchomienie Bluetooth na urządzeniu z systemem Windows.
Ilekroć próbuję wykonać nowe połączenie DeviceInformation
po nieudanym połączeniu, odmówi zwrotu urządzenia, które wcześniej próbowałem połączyć.
> Message: The service cannot be found in the specified name space.
Dziwny wynik, urządzenia 1.2 działają idealnie.
Plik manifestu:
<m2:DeviceCapability Name="bluetooth.rfcomm">
<m2:Device Id="any">
<m2:Function Type="serviceId:00001101-0000-1000-8000-00805F9B34FB"/>
</m2:Device>
</m2:DeviceCapability>
Wybór urządzenia:
Guid RfcommChatServiceUuid = Guid.Parse("00001101-0000-1000-8000-00805F9B34FB");
await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.FromUuid(RfcommChatServiceUuid)));
Łączenie: (id = chatserviceid)
StreamSocket _socket;
RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(deviceInformation1._id);
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
Rozłączanie:
this._socket.Dispose();
this._socket = null;
Zbadałem MSDN, próbki kodu, wersje demonstracyjne, wideo z kanału 9 i StackOverflow, żadne źródło nie może mi powiedzieć, czy występują problemy z Windows.Devices.Bluetooth.Rfcomm
.
Czy jest ktoś, kto rozpoznaje te dziwne wyniki? czy robię coś źle?
AKTUALIZACJA: Możliwym rozwiązaniem jest praca z Windows Phone 8.1 GDR2.
UWAGA: dla mnie i kilku innych osób ta aktualizacja nadal powoduje te same problemy.