(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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.