2012-10-03 80 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