2012-03-17 123 views
1

我修改了Android藍牙聊天代碼,以便從BluetoothChatService收到的字節將直接發送到BluetoothChat活動。服務和活動之間的快速溝通

其他藍牙設備的發送速率爲125Khz,每個數據包爲20bytes。 因此,每秒將有大約125 * 20字節的數據需要被服務接收,然後發送到活動。

但是,我發現活動收到的數據中會有丟包。我已經證實,服務中收到的數據確實是正確的。

這是發送20字節對象到活動的代碼的一部分。

mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, 20, -1, buffer) 
         .sendToTarget(); 

這是得到消息返回從該BluetoothChatService

private final Handler mHandler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      switch (msg.what) { 
      case MESSAGE_READ: 
       byte[] readBuf = (byte[]) msg.obj; 
    ...} 
} 

不知道如何解決這個問題的處理程序?謝謝。

回答

0

這是發送20字節對象到活動的代碼的一部分。

它發送一個參考到您的緩衝區。如果您在讀取更多藍牙數據時重複使用該緩衝區,則舊數據可能會在活動有機會使用數據之前被覆蓋。

+0

是的,我認爲這是我的問題的根源。你認爲解決這個問題的最好方法是什麼?謝謝! – 2012-04-06 12:34:30

+0

@AtleeYoung:在將字節傳遞給活動之前,將這些字節複製到單獨的「byte []」中。 – CommonsWare 2012-04-06 13:27:10

+0

buffer2 = buffer.clone(); – 2014-11-18 17:57:52