2012-10-30 90 views
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; 

     } 

    } 
    } 

回答

0

根据以往的经验,和实际上今天有同样的问题,

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

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

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

再次,只是一个猜测。

0

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