1

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

      }

     }
  }
4

2 回答 2

0

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

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

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

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

再次,只是一个猜测。

于 2012-10-31T13:46:48.090 回答
0

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

于 2014-03-31T17:44:36.270 回答