RFCOMM连接工作不稳定

我有Windows Phone应用程序,通过蓝牙(Bluetooth App To Device)控制设备。 在WP8中,它运行良好。 这是代码

1)search所有配对的设备

PeerFinder.AlternateIdentities["Bluetooth:Paired"] = ""; var peers = await PeerFinder.FindAllPeersAsync(); ObservableCollection<PeerInformation> devicesCollection = new ObservableCollection<PeerInformation>(); foreach (var peer in peers) { devicesCollection.Add(peer); } 

2)连接到设备

 socket = new StreamSocket(); await socket.ConnectAsync(selectedPeer.HostName, "{00001101-0000-1000-8000-00805F9B34FB}"); 

3)通过Obex连接到PC或其他手机发送文件

 socket = new Windows.Networking.Sockets.StreamSocket(); await socket.ConnectAsync(_selectedDevice.HostName, "{00001105-0000-1000-8000-00805f9b34fb}"); 

迁移到Windows Phone 8.1(SilverLight)后,这个事情不起作用:

 await socket.ConnectAsync(selectedPeer.HostName, "{00001101-0000-1000-8000-00805F9B34FB}"); 

在连接期间我有一个运行时exception:找不到元素,数据不再可用,访问被拒绝

我已经获得了SilverLight的functionID_CAP_NETWORK,ID_CAP_PROXIMITY

我在Package.appmainfest中设置….

 <m2:DeviceCapability Name="bluetooth.rfcomm"> <m2:Device Id="any"> <m2:Function Type="name:serialPort" /> <m2:Function Type="name:obexObjectPush" /> <m2:Function Type="name:obexFileTransfer" /> </m2:Device> 

我试图使用“Rfcomm”类

 var devicesInfoCollection = await DeviceInformation.FindAllAsync( RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort)); sensorCollection.Clear(); foreach (DeviceInformation dInfo in devicesInfoCollection) { sensorCollection.Add(dInfo); } 

连接

 RfcommDeviceService rfcommService = await RfcommDeviceService.FromIdAsync(selectedDeviceInfo.Id); socket = new StreamSocket(); await socket.ConnectAsync(rfcommService.ConnectionHostName, rfcommService.ConnectionServiceName, SocketProtectionLevel.BluetoothEncryptionAllowNullAuthentication); 

断开

 if (dataWriter != null) { dataWriter.DetachStream(); dataWriter.Dispose(); dataWriter = null; } if (socket != null) { socket.Dispose(); socket = null; } 

问题是,它很奇怪。 当我尝试连接,断开连接,然后再次连接,我不能。 设备从列表中消失。 设备在配对设备列表中,但是它从串行端口设备列表中消失。 当我尝试连接时,我有“找不到元素”。 这似乎是手机不会中断蓝牙连接。 我必须去蓝牙设置,并手动分解。

在这里观察到类似的问题 。