2012-04-25 96 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