Android - 通过蓝牙从Arduino接收奇怪的位

时间:2012-10-03 16:52:25

标签: android bluetooth arduino

我正在为Android编写软件,用于Arduino和Android之间的通信。

Arduino使用serial.println发送数据 - 我发送文字“It works!”。

Android正在以这种方式接收数据:

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

它会显示一些代码,而不是“它的工作原理!”,更确切地说它会显示[B@40e3f9b8

是什么原因以及如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

您刚刚尝试打印字节数组。在Java中,它只打印出对象[B的类型,然后是地址@40e3f9b8

如果要打印文本,请使用new String(bytes)从bytearray中获取字符串(使用默认字符集),然后打印出字符串。

答案 1 :(得分: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

查看完整的示例程序