我使用 BluetoothChat 示例中的代码从蓝牙秤发送和接收字节数据。秤从设备接收命令,然后发回一个字节数组。{2,198,48,48,48,48,199,3} 在我们的通信协议中,2 = STX,198 = 数据包开始,199 = 数据包结束,3 = ETX。
一切正常,除了 BluetoothChatService.java 中的以下代码反应奇怪,它丢弃了前两个字节。
/**
* 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}
但是一旦代码被单步执行,缓冲区的前两个字节就会被剥离,现在它错误地包含:
{48,48,48,48,48,199,3}
这就是消息处理程序最终传递给活动的原因。
为了更清楚,我必须补充一点,秤发送的字节流是 00 到 FF 范围内的十六进制字符。由于某些奇怪的原因,字符串在调试器中实际上看起来像这样:
{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 的新手,还有很多东西要学。所有帮助将不胜感激。谢谢阿德里安
我添加了 log.i 条目,以便根据 Radu 的建议更好地了解正在发生的事情。似乎在我通过蓝牙将数据写入我的设备后,它会响应,我们出于某种原因只读取了前两个字节,然后将它们发送到消息处理程序,然后读取从设备发送的其余数据包,然后发送这关闭到消息处理程序,但在处理程序甚至第一次响应之前,缓冲区已经被覆盖,因此当处理程序尝试读取前两个字节时,它正在读取响应的第 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
我希望这并没有混淆这个问题,但实际上演示了很多人在添加蓝牙聊天演示代码以供自己使用时似乎遇到的问题。不知何故,我们需要防止缓冲区被覆盖,直到消息处理程序读取它?问候
阿德里安·雷福德
由于 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 个字节......真的很奇怪,它是如何在这两个所谓的直接步骤之间填充的。在重写缓冲区之前,睡眠似乎允许处理程序有足够的时间从传递的缓冲区读取消息。
我本来希望 handler.obtainmessage... 发送一个唯一的缓冲区,但似乎将引用发送到线程缓冲区,因此很麻烦。如何每次发送一个唯一的缓冲区?谢谢阿德里安