我正在使用蓝牙串行连接在Android应用和微控制器之间进行通信。我能够在App和MC之间进行通信。但是我从MC发送的消息分为两部分。例如,如果我通过蓝牙发送$F05,A,B,C,0#
,它会将我的消息分成两部分,如下所示。第一部分是$
,其余部分是F05,A,B,C,0#
。您可以按如下方式查看我的日志cat输出。
12-24 10:40:19.926 17999-18183/? V/PRAVEEN: $
12-24 10:40:20.027 17999-18183/? V/PRAVEEN: F15,A,0,0,0#
我将这个消息发送到整个坚果android分为两部分。我的代码是
public void run() {
try{
int bytes;
while (true){
try{
avilableBytes=inputStream.available();
byte[] buffer=new byte[avilableBytes];
if (avilableBytes>0){
bytes=inputStream.read(buffer);
final String readMessage=new String(buffer);
Log.v("PRAVEEN",readMessage);
if (bytes>=3){
bt_handler.obtainMessage(handlerState,bytes,-1,readMessage).sendToTarget();
}
else {
SystemClock.sleep(100);
}
}
}catch (IOException e){
e.printStackTrace();
}
}
}catch (Exception e){
e.printStackTrace();
}
}
请帮助我获取我发送的实际字符串。谢谢。
答案 0 :(得分:2)
假设您正在使用rfcomm,请按照以下步骤操作。在我的例子中,我发送了两个有效载荷:第一个是消息的大小,第二个是消息本身。
while (true) {
Log.d(TAG, "listening to InputStream");
try {
// Read from the InputStream
int messageSizeBufferSize = mmInStream.readInt();
Log.d(TAG, messageSizeBufferSize+"<mSBS");
Log.d(TAG, "Run");
if(messageSizeBufferSize == 0)
continue;
Log.d(TAG, "Message of size "+messageSizeBufferSize);
bytes = 0;
buffer = new byte[messageSizeBufferSize];
while(bytes < messageSizeBufferSize) {
Log.d(TAG, "Reading bits "+bytes+" for mmInStream");
bytes += mmInStream.read(buffer,bytes,messageSizeBufferSize - bytes);
}
Log.d(TAG, "Read RFCOMM message completely");
String message = new String(buffer);
Log.d(TAG, "Read "+message);
} catch (IOException e) {
break;
}
}