2012-03-17 8 views
1

BluetoothChatServiceから受信したバイトがBluetoothChatアクティビティに直接送信されるように、Android Bluetoothチャットコードを変更しました。サービスとアクティビティ間の高速通信

他のBluetoothデバイスの送信速度は125Khzで、各パケットは20バイトです。 1秒あたり約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バイトのオブジェクトを送信するコードの一部です。

参照をバッファに送信しています。より多くのBluetoothデータを読み込むときにそのバッファを再利用すると、アクティビティにデータを使用する前に古いデータが上書きされる可能性があります。

+0

はい、これは私の問題の根本原因だと思います。この問題を解決する最善の方法は何と思いますか?ありがとう! –

+0

@AtleeYoung:バイトを別の 'byte []'にコピーしてから、アクティビティに渡します。 – CommonsWare

+0

buffer2 = buffer.clone(); –

関連する問題