(Nie) Podłączanie urządzeń Bluetooth z systemem Windows.Devices.Bluetooth.Rfcomm (WP8.1)

82

Łą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.Rfcommnazw 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 DeviceInformationpo 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.

ggg
źródło
2
Cześć gl77 - Pracuję nad tym problemem na Twoim koncie MSDN. Zaktualizowałem wątek i poinformuję cię, gdy dowiem się więcej.
Matt Small
Czy znalazłeś na to rozwiązanie? Mam podobny problem, gdy działa na jednym urządzeniu, ale nie na innym. Jedna uwaga to urządzenie, które działa, obsługuje sterownik Bluetooth Intela: 17.0.1401.422, podczas gdy to, które nie działa, obsługuje sterownik Bluetooth Intela: 17.0.1405.460.
Jon H,
Nie znalazłem jeszcze rozwiązania, zespół Matta wciąż pracuje nad tym problemem. Miejmy nadzieję, że w najbliższej przyszłości nastąpi naprawa.
ggg
2
Producent sprzętu przeprowadził mnie przez proces usuwania wersji 17.0.1405.460 sterowników Intel Bluetooth i instalacji starszej wersji 17.0.1401.422. Kiedy to zrobiliśmy, moja aplikacja znów zaczęła działać. Więc dla mnie problemem były nowsze sterowniki.
Jon H
1
Czy możesz dołączyć link do posta MSDN?
CICHY

Odpowiedzi:

1

Spróbuję CoolTerm i zobaczę, czy to działa dla Ciebie. Miałem podobny problem z podłączeniem głośnika z układem Sigma DSP wewnątrz przez połączenie USB, więc jeśli masz problemy z widzeniem urządzeń zewnętrznych, może to oznaczać, że urządzenie jest niekompatybilne z twoim komputerem. Pobierz CoolTerm i przejdź do opcji i pod Port szeregowy powinieneś zmienić port na żądane połączenie (bluetooth, usb itp.) Następnie edytuj opcje w razie potrzeby i przejdź do głównego okna i naciśnij Połącz i sprawdź, czy to działa dla Ciebie.

JohnColtraneisJC
źródło