【问题标题】:Service Discovery Failed on reconnect with bluetooth device重新连接蓝牙设备时服务发现失败
【发布时间】:2012-10-30 13:05:12
【问题描述】:

我正在尝试将蓝牙设备与我的 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;

      }

     }
  }

【问题讨论】:

    标签: android bluetooth


    【解决方案1】:

    根据经验,今天实际上遇到了同样的问题,

    如果我要推测的话,我会说您的其他设备在断开连接(链接丢失)时不会立即检测到它已断开连接(如果我记得的话,可能需要长达 30 秒),或者它只是表现不佳。

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

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

    再次,只是猜测。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题;我的解决方案可能特定于我正在使用的设备,但我发现通过在与套接字的最后一次通信和 socket.close() 之间将线程休眠 1000 毫秒,它会成功重新启动。

      【讨论】:

        猜你喜欢
        • 2012-08-18
        • 1970-01-01
        • 1970-01-01
        • 2014-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-13
        • 1970-01-01
        相关资源
        最近更新 更多