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

时间:2012-10-30 13:05:13

标签: android bluetooth

我正在尝试使用我的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 个答案:

答案 0 :(得分:0)

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

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

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

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

再次,只是一个猜测。

答案 1 :(得分:0)

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