Android studio Handler无法正确读取蓝牙消息

时间:2017-04-29 11:13:41

标签: android bluetooth arduino type-conversion android-handler

我通过蓝牙模块从arduino发送数据。我只是流式传输不同的整数;

int bluetoothData;

//give value to bluetoothData

Serial1.println(bluetoothData);

在我的Android代码中,我有一个蓝牙插槽,可以从arduino接收数据。数据由处理程序处理。这就是问题所在,有时候数据会被误读。例如,我发送了' 100',而是Handler保存在我的数据库' 000'或者我发送Â 194'所读的内容是' 994'。有时这样的阅读错误会在每15次出现一次。有时根本不会有任何错误。有人知道原因是什么吗?它是蓝牙模块的一些硬件故障,是我读取数据的方式等。以下是线程接收数据的Android代码:

final int RECIEVE_MESSAGE = 1;
...
mmInStream = socket.getOutputStream();
byte[] buffer = new byte[256];  // buffer store for the stream
int bytes; // bytes returned from read()

// Keep listening to the InputStream until an exception occurs
 while (true) {
 bytes = mmInStream.read(buffer); 
 h.obtainMessage(RECIEVE_MESSAGE, bytes, -1, buffer).sendToTarget();
 }

以下是处理程序本身的代码:

public void handleMessage(android.os.Message msg) {
        switch (msg.what) {
            case RECIEVE_MESSAGE:                                                   
                byte[] readBuf = (byte[]) msg.obj;
                String strIncom = new String(readBuf, 0, msg.arg1);                 
                sb.append(strIncom);                                                
                int endOfLineIndex = sb.indexOf("\r\n");                            
                if (endOfLineIndex > 0) {                                            
                    String sbprint = sb.substring(0, endOfLineIndex);               
                    sb.delete(0, sb.length());
                    btData = Integer.parseInt(sbprint);
                    M = btData;
                    insert = mDataBaseHelper.insert(M,DataBaseHelper.TABLE_Temp);
                }

0 个答案:

没有答案