最近在写一个关于手机蓝牙接受设备发来的数据的应用,在开发工程中发现接收到的数据有的时候是分段接收的 。上网查了一下有说是因为由于干扰或者是设备的原因导致数据没有一次发完,具体原因我也是没有太细追究,我的目的就是解决这个问题就好了,试了延迟接收发现在我的应用中效果不是很好,因为我的是接收不同种类的数据,而且长度也是长短不一,为了区分找了个办法
显示定义一个buffer
private static ByteBuffer buffer = ByteBuffer.allocate(1024);
获取蓝牙数据
InputStream inputStream = MCSApp.bluetoothSocket.getInputStream(); final byte[] bytes1 = new byte[inputStream.available()]; inputStream.read(bytes1); String aa = MethodHelper.byteToString(bytes1); buffer.put(bytes1); if (buffer.position() == 21 || buffer.position() == 18 || buffer.position() == 9) { bytes = new byte[buffer.position()]; buffer.flip(); buffer.get(bytes); String r_aa = MethodHelper.byteToString(bytes); Log.d("Buffer", "get byte array after done ---->" + r_aa); buffer.clear(); Message mag = new Message(); mag.what = 1; mag.obj = bytes; handler.sendMessage(mag); }
大致也就是这个样子了 , 及供参考!!!!!!