android之usb串口开发 发表于 2017-04-19 | 分类于 android | 阅读次数 | 记录一个在串口开发时遇到的问题 问题123456789101112131415161718192021222324252627 I can't understand why onNewData() method catchs sometimes full frames, andmost of the time truncated frame.Let me explain, in my application my serial device writes frames with thefollowing pattern:[0x1][lenght][data][0x4].On a pc terminal i can successfully read full frames starting with 0x1 andending with 0x4. Moreover an application from Google Play (free usb serialterminal) can successfully read full frame at once.But with the usb-serial-for-android library, onNewData catchs 70% timesframes into 2-3 pieces.ex schematically:full frame :------------------------------------byte[] data= A B C D E------------------------------------truncated:-------------------------byte[] data= A-------------------------byte[] data= B C-------------------------byte[] data= DE 解决方法很简答123456789101112131415161718192021222324252627@Override public void onNewData(final byte[] data) { String readMsg = new String(data, 0, data.length); msg = msg + readMsg; int newLineIndex = msg.indexOf('\n'); MLog.d(TAG, "index " + newLineIndex); String msgReturn = ""; if (newLineIndex != -1) { msgReturn = msg.substring(0, newLineIndex); msg = msg.substring(newLineIndex + 1, msg.length()); } MLog.d(TAG, msg); if (msgReturn.trim().equals("") == false) { final String finalMsgReturn = msgReturn; mHandler.post(new Runnable() { @Override public void run() { callbackfn.event(finalMsgReturn); } }); } } 1http://www.programcreek.com/java-api-examples/index.php?source_dir=Protocoder-master/protocoder/protocoder_apprunner/src/main/java/org/protocoderrunner/apprunner/api/boards/PSerial.java