2012-04-25 43 views
1

我一直在这一整天挠我的脑袋。我有一个用于监听设备的蓝牙套接字。这是通过AsyncTask完成的。我第一次尝试从远程设备连接到它时,我没有任何问题。现在我试图模拟断开连接。通过超出范围,关闭远程设备的蓝牙适配器,或者远程关闭连接。现在服务器套接字在连接丢失时抛出IOException。我用这个作为我的提示重新启动AsyncTask并重新开始收听。这似乎工作正常,所有我的logcat消息显示在重新启动,所以我知道任务正在运行,但套接字不会接受连接。认为这可能是重新启动AsyncTask时出现的一个问题,我尝试在接受后立即抛弃连接。重置它们之后,即使我调用system.gc(),我仍然有同样的问题。Java蓝牙插座不会在重新启动后接受连接

继承人一些代码,我现在使用测试:

boolean running = true; 
     while(running){ 
      btAdapter = BluetoothAdapter.getDefaultAdapter(); 
      btServerSocket = btAdapter.listenUsingRfcommWithServiceRecord(NAME, ID); 
      btSocket = btServerSocket.accept(); 

      btServerSocket.close(); 
      btSocket.close(); 

      btServerSocket = null; 
      btSocket = null; 
      btAdapter = null; 

      System.gc(); 
      sleep(10); 
     } 

我真的不知道我在做什么错。任何帮助是极大的赞赏。

谢谢。

回答

0

如果您在Android 2.3.x上只看到这个问题,那么您可能会遇到一个我刚才写到的关于另一个问题的问题。这个问题也表现为accept()第一次工作,但后来尝试失败。有关详细信息,请参阅我的文章here