windows phone 8.1蓝牙重新连接 [英] windows phone 8.1 bluetooth re-connection
问题描述
以下代码剪切,在Windows Phone 8.1智能手机上运行,成功实现了与给定配对设备名称的蓝牙连接。 通过StreamSocket与设备成功通信并处理插槽后,再次无法通过
与同一设备进行蓝牙连接。 尝试使用剪切的相同代码重新连接,在以下行引发异常:
The following code snipped, running on a windows phone 8.1 smartphone, successfully makes a bluetooth connection to a given paired device-name. After successful communication with the device via a StreamSocket, and disposing the socket, it is unable to make a bluetooth connection to the same device again. Trying to re-connect using the same code snipped, throws an exception on the following line :
await _socket.ConnectAsync(service.ConnectionHostName,service.ConnectionServiceName);
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
我可以在"unpair"之后重新连接到设备。和"修复"来自蓝牙设置页面的设备。
I am able to re-connect to the device after I "unpair" and "repair" the device from the bluetooth settings page.
我做错了吗? 好像操作系统没有释放蓝牙com端口等。我应该使用什么代码/ api,这将导致蓝牙重新连接到同一台设备而不需要我手动取消配对
并重新配对设备?
Is there something I am doing wrong? It is as if the operating system doesn't release the bluetooth com port etc. What code / api should I use that will result in successfull bluetooth re-connection to the same device without me manually un-pair and re-pair the device ?
连接到给定设备的代码剪切(在c#中):
Code snipped that connects to given device (in c#):
      private StreamSocket _socket = null;
      private DataWriter _dataWriter = null;
      private DataReader _dataReader = null;
private StreamSocket _socket = null;
private DataWriter _dataWriter = null;
private DataReader _dataReader = null;
      private void disconnect()
      {
          if(_socket!= null)
          {
              if(_dataWriter!= null)
              {
                  _dataWriter.Dispose();
                  _socket.OutputStream.Dispose();
                  _dataWriter = null;
              }
              if(_dataReader!= null)
              {
                  _dataReader.Dispose();
                  _socket.InputStream.Dispose();
                  _dataReader = null;
              }
             锁定(这)
              {
                  _socket.Dispose();
                  _socket = null;
              }¥b $ b           }¥b $ b       }
private void disconnect()
{
if (_socket != null)
{
if (_dataWriter != null)
{
_dataWriter.Dispose();
_socket.OutputStream.Dispose();
_dataWriter = null;
}
if (_dataReader != null)
{
_dataReader.Dispose();
_socket.InputStream.Dispose();
_dataReader = null;
}
lock (this)
{
_socket.Dispose();
_socket = null;
}
}
}
private async Task< String> ConnectToDevice(String peer)
&NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(_socket!= null)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; disconnect();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;返回"成功##已断开连接";
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;否则
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;试试
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; foreach(设备中的var设备)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; if(device.Name.Equals(peer))
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(device.Id);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; _socket = new StreamSocket();
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; await _socket.ConnectAsync(service.ConnectionHostName,service.ConnectionServiceName);
private async Task<String> ConnectToDevice(String peer)
{
if (_socket != null)
{
disconnect();
return "success##Disconnected";
}
else
{
try
{
var devices = await DeviceInformation.FindAllAsync(RfcommDeviceService.GetDeviceSelector(RfcommServiceId.SerialPort));
foreach (var device in devices)
{
if (device.Name.Equals(peer))
{
RfcommDeviceService service = await RfcommDeviceService.FromIdAsync(device.Id);
_socket = new StreamSocket();
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; _dataWriter = new DataWriter(_socket.OutputStream);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; _dataReader = new DataReader(_socket.InputStream);
_dataWriter = new DataWriter(_socket.OutputStream);
_dataReader = new DataReader(_socket.InputStream);
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;返回"成功##已连接";
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;返回"失败##无法连接";
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; catch(例外情况)
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; {
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP;返回"失败##错误:" + ex.Message +" ;;" +" ;;" + ex.Source +";" + ex.InnerException +" ;;" + ex.StackTrace;
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }¥b $ b &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; }
&NBSP; &NBSP; &NBSP; } b $ b
return "success##Connected";
}
}
return "failure##Could not connect";
}
catch (Exception ex)
{
return "failure##Error:" + ex.Message + ";" + ";" + ex.Source + ";" + ex.InnerException + ";" + ex.StackTrace;
}
}
}
推荐答案
嗨imoola2016,
Hi imoola2016,
我测试了它的蓝牙Rfcomm聊天示例可以使蓝牙设备再次连接到同一设备而不需要"取消配对"和"修复"
设备。以下行代码可以正常工作:
I test the Bluetooth Rfcomm Chat sample that it can make a bluetooth device connection to the same device again without the "unpair" and "repair" the device. The following line code works fine:
await _socket.ConnectAsync(service.ConnectionHostName,service.ConnectionServiceName);
await _socket.ConnectAsync(service.ConnectionHostName, service.ConnectionServiceName);
什么是例外?代码抛出?
What is the exception does the code throw?
如果你能分享一个简单的转载项目会更好,它会帮助我们更清楚地分析和诊断这个问题。
It will be better if you can share us a simple reproduced project, it will help us analyze and diagnose this issue more clearly.
最好的问候,
Jayden Gu
Jayden Gu
这篇关于windows phone 8.1蓝牙重新连接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!