2012-03-26 26 views
1

Helo。我正在開發一個通過藍牙傳輸數據的應用程序(使用飛行記錄器設備)。當我收到大量的數據數據時(3000 - 40000行文本,取決於文件大小),我的應用似乎停止接收數據。我用InputStream.read(buffer)接收數據。例如:我向飛行記錄器發送一個命令,它開始向我發送一個文件(逐行),在我的手機上我收到120行,然後應用程序發現。android - 藍牙:程序卡在輸入流中

Intresting是在我的HTC Desire上,應用程序只是在三星Galaxy S手機上進行掃描,每隔一段時間我都會嘗試收集超過50行的應用程序。

該代碼基於BluetoothChat示例。這是代碼,我正在聽的的BluetoothSocket部分:

byte[] buffer = new byte[1024]; 
int bytes =0; 

while(true) 
{ 
    bytes = mmInStream.read(buffer); 
    readMessage = new String(buffer, 0, bytes); 
    Log.e("read", readMessage); 

    String read2 = readMessage; 
    //searching for the end of line to count the lines(the star means the start of the checksum) 
    int currentHits = read2.replaceAll("[^*]","").length(); 
    nmbrOfTransferedFligts += currentHits; 
    . 
    . 
    . 
    //parsing and saving the recieved data   

我必須說,我在一段時間(true)循環運行此,在一個線程,即在Android服務來實現。該應用程序似乎卡在「字節= mmInStream.read(緩衝區);」 我試圖用BufferedReader來做到這一點,但沒有成功。

謝謝。

回答

2

該應用似乎停留在「bytes = mmInStream.read(buffer);」

但這是正常行爲:InputStream.read(byte [])在沒有更多數據可用時阻塞。

這表明問題出在另一端或設備之間的通信中。是否有可能你有一個通信問題(這在Galaxy和Desire上有點不同),它阻止了更多的數據被接收?

此外,我建議你圍繞read語句包裝try/catch,以確保能夠捕獲任何可能的IOException。雖然我猜你會在logcat中看到它,如果這種情況發生的話。

說到logcat,我建議你看看它生成的Android本身的logcat語句。我發現它產生了很多藍牙,這可能會幫助你確定是否真的有更多的數據要讀取()。

+0

非常感謝您的回答。 我試過了你的建議。行'bytes = mmInStream.read(buffer);'不拋出任何異常。但是我的設備一直在向我的手機發送數據(100%)。 似乎BluetoothSocket停止正常工作? 謝謝。 – Primoz990 2012-04-02 07:54:38

+0

是的,這似乎是你的BluetoothSocket不能正常工作。您已經在HTC和三星設備上觀察到此問題,因此這不是供應商特定的錯誤。也許看一下Android問題列表,看看是否存在可能解釋這個問題的問題。我唯一能想到的其他事情就是查看系統中的logcat輸出。在我的手機BlueZ(Linux/Android藍牙堆棧)中,將大量調試語句放入logcat中。 – Tom 2012-04-02 15:18:16