web-dev-qa-db-ja.com

(Dis)BluetoothデバイスをWindows.Devices.Bluetooth.Rfcomm(WP8.1)に接続する

Windows Phone /デスクトップ8.1では、Bluetoothデバイスへの接続と切断によってさまざまな結果が出ています。私は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デバイスを再接続する唯一の方法は、ペアリングを解除して、WindowsデバイスでBluetoothをシャットダウン/再起動することです。

接続に失敗した後で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での作業は、可能な解決策です。

注:私自身と他の何人かの人々にとって、このアップデートはまだ同じ問題を与えます。

82
ggg

CoolTermを試してみて、うまくいくかどうかを確認します。 USB接続を介してスピーカーと内部のSigma DSPチップを接続することで同様の問題が発生したため、外部デバイスが表示されない場合は、デバイスがコンピュータと互換性がない可能性があります。 CoolTermをダウンロードしてオプションに移動し、シリアルポートの下でポートを目的の接続(bluetooth、usbなど)に変更する必要があります。その後、必要に応じてオプションを編集し、メインウィンドウに移動して接続をクリックし、機能するかどうかを確認します。

1