当前位置: 首页 > 知识库问答 >
问题:

重新连接蓝牙设备时服务发现失败

凤经国
2023-03-14

我正在尝试将蓝牙设备与我的android应用程序连接。到目前为止,它运行良好。

现在的问题是,当我的设备超出范围时,我显示一个对话框并要求用户重新连接或不连接。

有时我能够重新连接设备,有时我确实会出错,即。

Service Discovery Failed

我真的不知道为什么会这样

private class ConnectThread extends Thread {

           public ConnectThread() {

           try {

            bluetoothSocket = bluetoothDevice.createRfcommSocketToServiceRecord(UUID);


        } catch (IOException e) {

              System.out.println("IO EXCEPTION" + e.getMessage() +"");

        }
      }

        public void run() {

           bluetoothAdapter.cancelDiscovery();

        try {
               // I AM GETTING ERROR HERE
               bluetoothSocket.connect();


        } catch (IOException connectException) {


        Log.d("Exception : ConnectThread -> Run" , connectException.getMessage()+"");

        try {

              bluetoothSocket.close();

         } catch (IOException e) {

        // TODO Auto-generated catch block

          e.printStackTrace();

       }

        return;

      }

     }
  }

共有2个答案

孟永望
2023-03-14

我也有同样的问题;我的解决方案可能特定于我正在使用的设备,但我发现,在与套接字的最后一次通信和套接字之间Hibernate线程1000ms。close(),它将成功重新启动。

葛修筠
2023-03-14

从经验来看,今天实际上也有同样的问题,

如果我要推测,我会说你的另一个设备,在断开连接(链路丢失)并没有立即检测到它已经断开连接(如果我记得的话,它可能需要长达30秒),或者它只是表现不好。

因此,它不会在SDP上读取服务(不会再次打开套接字),因此当Android启动连接(作为客户端)时,您的服务器会失败-没有打开的套接字。

您应该发布其他设备日志。并尝试使用不同的其他设备-但相同的Android手机和代码!

再说一次,只是一个猜测。

 类似资料:
  • 问题内容: 我正在尝试创建一个用于测试设备的基本蓝牙应用程序。 我从developer.android获得了代码。这是链接:http : //developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices 这是我的线程代码的运行部分: 无论我尝试了什么,都行不通。总是抛出IOException,我从l

  • 我正在尝试创建一个基本的蓝牙应用程序,用于测试设备。 我从开发者那里得到了代码。Android以下是链接:http://developer.android.com/guide/topics/connectivity/bluetooth.html#ConnectingDevices 这里是运行我的线程代码的一部分: 无论我尝试了什么

  • 连接设备 接口说明 用于连接 扫描出来的蓝牙设备。 参数说明 字段 类型 必须? 说明 device RKBLEDevice 是 蓝牙设备 示例代码 Swift: RokidMobileSDK.binder.connect(device: RKBLEDevice) Objc: [RokidMobileSDK.binder connect:device]; 断开设备 接口说明 用于断开已经连接的

  • 连接蓝牙设备 接口说明 接口需传入蓝牙名称(蓝牙address重启后会变) 参数说明 字段 类型 必须? 说明 name String 是 设备名称 举个大栗子 RokidMobileSDK.binder.connectBT(name, new IBTConnectCallBack() { @Override public void onConnectSucceed(BTDevic

  • 我如何获得Android所有已连接蓝牙设备的列表,而不考虑配置文件? 或者,我看到您可以通过BluetoothManager获取特定配置文件的所有连接设备。获取连接的设备。 我想我可以通过ACTION_ACL_CONNECTED/ACTION_ACL_DISCONNECTED监听连接/断开来查看哪些设备连接...似乎容易出错。 但我想知道是否有更简单的方法来获取所有已连接蓝牙设备的列表。

  • 连接和断开蓝牙设备在Windows Phone/Desktop 8.1上产生了各种结果。我一直在使用命名空间和我尝试连接具有不同蓝牙版本/类的几个设备。 版本1.2(1级和2级) 每当我尝试连接到2.0或2.1设备时,都会出现问题。第一次尝试连接到每个设备时,一切都会顺利,连接也会打开。当我随后关闭连接并重新连接设备时,问题就开始了。在重新连接期间,连接将永远不会打开,调试器将抛出一个系统。例外: