windows phone 8.1蓝牙重新连接 [英] windows phone 8.1 bluetooth re-connection

查看:80
本文介绍了windows phone 8.1蓝牙重新连接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码剪切,在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆