2015-05-02 86 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); 
}