2015-05-02 39 views
1

目前我的android蓝牙设备接收字符一个接一个。我可以一个接一个没有一个接一个吗?谢谢你的建议。Android蓝牙读取字符串

例如传入的数据: ABCD但传入一个由1像A B C d

如何使它喜欢: ABCD传入ABCD直线距离。

我需要更改这行代码?

message = txtReceived.getText().toString() + (char)data;} 

这是我现在的代码。

btnSend.setOnClickListener(this); 


int delay = 1000; // delay in ms 
int period = 100; // repeat in ms 

timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
{ 
    public void run() 
    { 
     if (flag) 
     { 
      final byte data = read(); 

      readMessageHandler.post(new Runnable() 
      { 
       public void run() 
       { 
        String message; 

        if (data != 1){ 
         /* if(txtReceived.getText().toString().equals("ON") || txtReceived.getText().toString().equals("OFF")) 
         { 
          txtReceived.setText(""); 
         }*/ 
         message = txtReceived.getText().toString() + (char)data;} 

        else{ 
         message = "";} 

        txtReceived.setText(message); 
       } 
      }); 
     } 
    } 
}, delay, period); 

private byte read() 
{ 

    byte dataRead = 0; 


    try 
    { 
     dataRead = (byte) inputStream.read(); 
    } 
    catch(IOException readException) 
    { 
     toastText = "Failed to read from input stream: " + readException.getMessage(); 
     Toast.makeText(Blood_Pressure.this, toastText, Toast.LENGTH_SHORT).show(); 
    } 
    return dataRead; 
} 

回答

0

的问题是,inputstream.read只返回一个字节的数据,因此,你正在阅读byte-by-byte

您可以在消息前发送消息的大小,然后发送消息。 您可以将代码修改为像这样的东西。

{ 
... 
// assuming size is within the range of integer 
byte[] sizeOfIncomingData = new byte[4]; 
inputStream.read(sizeOfIncomingdata, 0, 4); 

int size = getIntFromByteArray(sizeOfIncomingData); 
byte[] dataBuffer = new byte[size]; 
inputStream.read(dataBuffer, 0, size); 
String message = new String(dataBuffer, "UTF-8"); 
} 

private int getIntFromByteArray(byte[] bytes) 
{ 
    return (bytes[0] & 0xFF) << 24 | (bytes[1] & 0xFF) << 16 | (bytes[2] & 0xFF) << 8 | (bytes[3] & 0xFF); 
}