2012-10-03 107 views
2

我正在爲Android編寫軟件,用於Arduino和Android之間的通信。Android - 通過藍牙接收來自Arduino的奇怪位

Arduino使用serial.println發送數據 - 我發送文本「It works!」。

Android的以這種方式接收數據:

bytes = mmInStream.read(buffer); 
mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 

,它顯示了一些代碼,而不是更確切地說它顯示[[email protected]「它的作品!」。

是什麼原因以及如何解決這個問題?

回答

3

你只是試圖打印一個字節數組。在Java中,只打印出對象[B的類型,後面跟着地址@40e3f9b8

如果要打印文本,請使用new String(bytes)從字節數組中獲取字符串(使用默認字符集),然後打印出字符串。

1

你必須從字節數組中創建一個字符串: String strIncom = new String(buffer,0,msg.arg1); 與\ r \ n處理程序完整的示例:

h = new Handler() { 
    public void handleMessage(android.os.Message msg) { 
     switch (msg.what) { 
     case RECIEVE_MESSAGE:             // if receive massage 
      byte[] readBuf = (byte[]) msg.obj; 
      String strIncom = new String(readBuf, 0, msg.arg1);     // create string from bytes array 
      sb.append(strIncom);            // append string 
      int endOfLineIndex = sb.indexOf("\r\n");       // determine the end-of-line 
      if (endOfLineIndex > 0) {           // if end-of-line, 
       String sbprint = sb.substring(0, endOfLineIndex);    // extract string 
       sb.delete(0, sb.length());          // and clear 
       txtArduino.setText("Data from Arduino: " + sbprint);   // update TextView 
      } 
      //Log.d(TAG, "...String:"+ sb.toString() + "Byte:" + msg.arg1 + "..."); 
      break; 
     } 
    }; 
}; 

查看完整的示例程序與APK和來源here