BluetoothChat の例のコードを使用して、Bluetooth Scale からバイト データを送受信しました。はかりはデバイスからコマンドを受け取り、バイト配列を返します。{2,198,48,48,48,48,199,3} 2 = STX、198 = パケット開始、199 = パケット終了、3 = 通信プロトコルの ETX。
BluetoothChatService.java 内の次のコードが最初の 2 バイトを削除するという奇妙な反応を示すことを除いて、すべて正常に動作します。
/**
* This thread runs during a connection with a remote device.
* It handles all incoming and outgoing transmissions.
*/
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket, String socketType) {
Log.d(TAG, "create ConnectedThread: " + socketType);
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
// Get the BluetoothSocket input and output streams
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
Log.e(TAG, "temp sockets not created", e);
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
Log.i(TAG, "BEGIN mConnectedThread");
final byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
// Read from the InputStream
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
// Start the service over to restart listening mode
BluetoothChatService.this.start();
break;
}
}
}
特に次のコード セクションに問題があります。
bytes = mmInStream.read(buffer);
// Send the obtained bytes to the UI Activity
mHandler.obtainMessage(BluetoothChat.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();
デバッグ時に、実行前に mmInStream.read(buffer) でバッファーの内容を確認すると、バッファーにはスケール デバイスから送り返された正しいデータが含まれています。
{2,198,48,48,48,48,48,199,3}
しかし、コードがステップ実行されると、バッファーの最初の 2 バイトが取り除かれ、誤って以下が含まれるようになります。
{48,48,48,48,48,199,3}
そして、メッセージ ハンドラーが最終的にアクティビティに渡すのはこれです。
より明確にするために、スケールによって送信されるバイトのストリームは、00 から FF の範囲の 16 進文字であることを追加する必要があります。何らかの奇妙な理由で、文字列は実際にはデバッガーで次のように表示されます。
{2,-58,48,48,48,48,48,-57,3}
そして 2,-58 がドロップされます。
ソケットを介してバイト配列を送信する場合、次のことを行う必要があることに気付きました。
byte[] sendBytes = {2,(byte)198,48,48,48,48,48,(byte)199,3}
この配列の内容をデバッグすると、{2,-58,48,48,48,48,48,-57,3} が得られます
私は Android - Java が初めてで、学ぶことがたくさんあることを理解してください。すべての助けに感謝します。ありがとうエイドリアン
Radu のアドバイスに基づいて何が起こっているのかをよりよく理解するために、log.i エントリを追加しました。Bluetooth 経由でデバイスにデータを書き込んだ後、デバイスが応答し、何らかの理由で最初の 2 バイトだけを読み取り、これらをメッセージ ハンドラーに送信し、デバイスから送信された残りのパケットを読み取り、送信したようです。これはメッセージハンドラーに送信されますが、ハンドラーが最初に応答する前に、バッファーは既に上書きされているため、ハンドラーが最初の 2 バイトを読み取ろうとするまでに、応答の 3 番目と 4 番目のバイトを読み取っています。その後、すぐに再び応答し、3 ~ 17 番目の位置からパケット全体を読み取ります。つまり、簡単に言えば、メッセージ ハンドラーは、送信されたバッファーが上書きされた後にのみ応答します。以下のログを参照してください。
09-05 13:16:52.093: V/BluetoothSocket.cpp(11279): writeNative
09-05 13:16:52.118: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 2
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): -58
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.118: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:52.163: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.163: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:52.168: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:52.168: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:52.168: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.168: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 44
09-05 13:16:52.173: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 49
09-05 13:16:52.178: I/IN_BUF_AFTER(11279): 50
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 48
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 44
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 85
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 13
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): -57
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 3
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 6
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:52.188: I/IN_BUF_AFTER(11279): 0
09-05 13:16:52.188: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:52.193: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:52.208: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:52.208: I/MESSAGE_READ(11279): I am reading 2 bytes
09-05 13:16:52.208: I/Content(11279): The entire array:
09-05 13:16:52.208: I/some hardcoded tag(11279): 0
09-05 13:16:52.208: I/some hardcoded tag(11279): 0
09-05 13:16:52.273: I/MESSAGE_READ(11279): I am reading 17 bytes
09-05 13:16:52.273: I/Content(11279): The entire array:
09-05 13:16:52.273: I/some hardcoded tag(11279): 0
...truncated to save space ...
09-05 13:16:52.283: I/some hardcoded tag(11279): 0
09-05 13:16:52.283: I/some hardcoded tag(11279): 0
09-05 13:16:54.528: V/BluetoothSocket.cpp(11279): writeNative
09-05 13:16:54.553: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 2
09-05 13:16:54.553: I/IN_BUF_AFTER(11279): 2
09-05 13:16:54.553: I/IN_BUF_AFTER(11279): -58
09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.558: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.618: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.618: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:54.618: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:54.618: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:54.623: I/IN_BUFFER(11279): The entire buffer after read stream into buffer: 17
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.623: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 44
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.628: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 49
09-05 13:16:54.633: I/IN_BUF_AFTER(11279): 50
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 48
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 44
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 85
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): 13
09-05 13:16:54.638: I/IN_BUF_AFTER(11279): -57
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 3
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 6
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.648: I/IN_BUF_AFTER(11279): 0
...truncated to save space ...
09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.653: I/IN_BUF_AFTER(11279): 0
09-05 13:16:54.653: I/IN_BUFFER(11279): We now send to handler.
09-05 13:16:54.653: I/IN_BUFFER(11279): Read Stream into Buffer:
09-05 13:16:54.653: V/BluetoothSocket.cpp(11279): readNative
09-05 13:16:54.658: I/MESSAGE_READ(11279): I am reading 2 bytes
09-05 13:16:54.658: I/Content(11279): The entire array:
09-05 13:16:54.658: I/some hardcoded tag(11279): 0
09-05 13:16:54.663: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/MESSAGE_READ(11279): I am reading 17 bytes
09-05 13:16:54.723: I/Content(11279): The entire array:
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.723: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
09-05 13:16:54.728: I/some hardcoded tag(11279): 0
私の新しいコードは、最新のストリームを読み取る前にバッファーを 0 にリセットするため、メッセージ ハンドラーは 0 しか表示しません。これを行う前に、ログは次のように表示されます。
09-05 13:06:20.508: V/BluetoothSocket.cpp(10176): writeNative
09-05 13:06:20.533: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 2
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): -58
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.533: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.538: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.548: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.553: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.568: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.573: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.578: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:20.578: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:20.578: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:20.578: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.578: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.583: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 49
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 51
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 48
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 44
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 85
09-05 13:06:20.593: I/IN_BUF_AFTER(10176): 13
09-05 13:06:20.598: I/IN_BUF_AFTER(10176): -57
09-05 13:06:20.598: I/IN_BUF_AFTER(10176): 3
09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 6
09-05 13:06:20.613: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:20.623: I/IN_BUF_AFTER(10176): 0
09-05 13:06:20.623: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:20.623: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:20.623: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:20.628: I/MESSAGE_READ(10176): I am reading 2 bytes
09-05 13:06:20.628: I/Content(10176): The entire array:
09-05 13:06:20.628: I/some hardcoded tag(10176): 48
09-05 13:06:20.628: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/MESSAGE_READ(10176): I am reading 17 bytes
09-05 13:06:20.688: I/Content(10176): The entire array:
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.688: I/some hardcoded tag(10176): 44
09-05 13:06:20.688: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 49
09-05 13:06:20.693: I/some hardcoded tag(10176): 51
09-05 13:06:20.693: I/some hardcoded tag(10176): 48
09-05 13:06:20.693: I/some hardcoded tag(10176): 44
09-05 13:06:20.693: I/some hardcoded tag(10176): 85
09-05 13:06:20.693: I/some hardcoded tag(10176): 13
09-05 13:06:20.693: I/some hardcoded tag(10176): -57
09-05 13:06:20.693: I/some hardcoded tag(10176): 3
09-05 13:06:20.693: I/some hardcoded tag(10176): 6
09-05 13:06:21.788: V/BluetoothSocket.cpp(10176): writeNative
09-05 13:06:21.803: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 2
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 2
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): -58
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.803: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.808: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.818: I/IN_BUF_AFTER(10176): 49
09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 51
09-05 13:06:21.823: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.828: I/IN_BUF_AFTER(10176): 85
09-05 13:06:21.833: I/IN_BUF_AFTER(10176): 13
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): -57
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 3
09-05 13:06:21.848: I/IN_BUF_AFTER(10176): 6
09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:21.853: I/IN_BUF_AFTER(10176): 0
09-05 13:06:21.853: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:21.858: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:21.858: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:21.858: I/IN_BUFFER(10176): The entire buffer after read stream into buffer: 17
09-05 13:06:21.858: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.863: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 49
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 51
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 48
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 44
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 85
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 13
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): -57
09-05 13:06:21.868: I/IN_BUF_AFTER(10176): 3
09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 6
09-05 13:06:21.873: I/IN_BUF_AFTER(10176): 0
...truncated to save space ...
09-05 13:06:21.893: I/IN_BUF_AFTER(10176): 0
09-05 13:06:21.893: I/IN_BUFFER(10176): We now send to handler.
09-05 13:06:21.893: I/IN_BUFFER(10176): Read Stream into Buffer:
09-05 13:06:21.898: V/BluetoothSocket.cpp(10176): readNative
09-05 13:06:21.903: I/MESSAGE_READ(10176): I am reading 2 bytes
09-05 13:06:21.903: I/Content(10176): The entire array:
09-05 13:06:21.903: I/some hardcoded tag(10176): 48
09-05 13:06:21.903: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/MESSAGE_READ(10176): I am reading 17 bytes
09-05 13:06:21.958: I/Content(10176): The entire array:
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 44
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 49
09-05 13:06:21.958: I/some hardcoded tag(10176): 51
09-05 13:06:21.958: I/some hardcoded tag(10176): 48
09-05 13:06:21.958: I/some hardcoded tag(10176): 44
09-05 13:06:21.958: I/some hardcoded tag(10176): 85
09-05 13:06:21.958: I/some hardcoded tag(10176): 13
09-05 13:06:21.958: I/some hardcoded tag(10176): -57
09-05 13:06:21.963: I/some hardcoded tag(10176): 3
09-05 13:06:21.963: I/some hardcoded tag(10176): 6
問題を混乱させていないことを願っていますが、実際には、BluetoothChat デモ コードを独自の使用に適応させたときに多くの人が抱えているように見える問題を示しています。どういうわけか、メッセージ ハンドラがバッファを読み取るまで、バッファが上書きされないようにする必要がありますか?? よろしく
エイドリアン・レイフォード
Sleep! により更新されたコードの動作が改善されました。
public void run() {
Log.i(TAG, "BEGIN IN mConnectedThread");
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true) {
try {
try {
sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
bytes = mmInStream.available();
Log.i("IN_BUFFER", "mmInStream-available bytes: " + Integer.toString(bytes)+ " ");
if (bytes>0){
for(int i=0; i<30; i++){
buffer[i] = 0;}
// Read from the InputStream
Log.i("IN_BUFFER", "Read Stream into Buffer:");
bytes = mmInStream.read(buffer);
Log.i("IN_BUFFER", "The entire buffer after read stream into buffer: " + Integer.toString(bytes)+ " ");
for(int i=0; i<30; i++)
Log.i("IN_BUF_AFTER", buffer[i] + " ");
// Send the obtained bytes to the UI Activity
Log.i("IN_BUFFER", "We now send to handler.");
mHandler.obtainMessage(BluetoothScale.MESSAGE_READ, bytes, -1, buffer)
.sendToTarget();}
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
// Start the service over to restart listening mode
BluetoothScaleService.this.start();
break;
}
}
}
ログは次のようになります。
09-05 20:57:15.833: V/BluetoothSocket.cpp(25368): availableNative
09-05 20:57:15.838: I/IN_BUFFER(25368): mmInStream-available bytes: 0
09-05 20:57:15.888: V/BluetoothSocket.cpp(25368): availableNative
09-05 20:57:15.888: I/IN_BUFFER(25368): mmInStream-available bytes: 0
09-05 20:57:15.943: V/BluetoothSocket.cpp(25368): availableNative
09-05 20:57:15.943: I/IN_BUFFER(25368): mmInStream-available bytes: 0
09-05 20:57:15.958: V/BluetoothSocket.cpp(25368): writeNative
09-05 20:57:15.988: V/BluetoothSocket.cpp(25368): availableNative
09-05 20:57:15.993: I/IN_BUFFER(25368): mmInStream-available bytes: 2
09-05 20:57:15.993: I/IN_BUFFER(25368): Read Stream into Buffer:
09-05 20:57:15.993: V/BluetoothSocket.cpp(25368): readNative
09-05 20:57:15.998: I/IN_BUFFER(25368): The entire buffer after read stream into buffer: 19
09-05 20:57:15.998: I/IN_BUF_AFTER(25368): 2
09-05 20:57:15.998: I/IN_BUF_AFTER(25368): -58
09-05 20:57:16.003: I/IN_BUF_AFTER(25368): 48
...truncated to save space ...
09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 85
09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 13
09-05 20:57:16.033: I/IN_BUF_AFTER(25368): -57
09-05 20:57:16.033: I/IN_BUF_AFTER(25368): 3
09-05 20:57:16.038: I/IN_BUF_AFTER(25368): 6
09-05 20:57:16.038: I/IN_BUF_AFTER(25368): 0
...truncated to save space ...
09-05 20:57:16.043: I/IN_BUF_AFTER(25368): 0
09-05 20:57:16.043: I/IN_BUFFER(25368): We now send to handler.
09-05 20:57:16.058: I/MESSAGE_READ(25368): I am reading 19 bytes
09-05 20:57:16.058: I/Content(25368): The entire array:
09-05 20:57:16.058: I/some hardcoded tag(25368): 2
09-05 20:57:16.058: I/some hardcoded tag(25368): -58
09-05 20:57:16.058: I/some hardcoded tag(25368): 48
...truncated to save space ...
09-05 20:57:16.063: I/some hardcoded tag(25368): 13
09-05 20:57:16.063: I/some hardcoded tag(25368): -57
09-05 20:57:16.063: I/some hardcoded tag(25368): 3
09-05 20:57:16.063: I/some hardcoded tag(25368): 6
09-05 20:57:16.093: V/BluetoothSocket.cpp(25368): availableNative
09-05 20:57:16.093: I/IN_BUFFER(25368): mmInStream-available bytes: 0
mmInStream.available() が 2 バイトを返し、次のコード行でバッファを読み取ると、19 バイトが読み取られることに注意してください。本当に奇妙なことに、これら 2 つのおそらく即時のステップの間でいっぱいになります。スリープは、バッファが書き換えられる前に、ハンドラーが渡されたバッファからメッセージを読み取るのに十分な時間を与えるように見えます。
handler.obtainmessage... が一意のバッファーを送信することを期待していましたが、スレッドバッファーへの参照を送信しているように見えるため、面倒です。毎回一意のバッファを送信するにはどうすればよいですか? Thxエイドリアン