安卓蓝牙串口中InputStream数据接收不完整,已解决

问题描述

      先描述一下问题,烦了我一段时间。我是在单片机上使用HC05蓝牙模块和安卓手机进行通讯,从手机往单片机发送正常,从单片机往手机发数据总是不完整,一段字符被分成几段了,安卓的程序用的是谷歌官方的BluetoothChat例程。


分析原因

安卓蓝牙串口中InputStream数据接收不完整,已解决_第1张图片      

      分析了一下原因,谷歌官方的BluetoothChat读取线程的代码如上,是由于安卓程序使用InputStream读取时不能和串口一样设置一个结束符(串口的结束符一般是换行符'\r\n'),安卓中线程读取就很随机性了,你不知道它在什么时候就读完一刀下去,你的字符串就不完整了。

解决方案

      本来想找找InputStream中有没有结束符这个东西,找了半天也没找到,所以还是自己写一个吧。

安卓蓝牙串口中InputStream数据接收不完整,已解决_第2张图片

    就是使用InputStream.read()逐个读取字符,判读是不是结束符,如果没到结束符就一直读取写入。

    注意if(ch!=-1)这个判断不能省,如果什么也没读到就是返回-1,这个时候不能让字符写进去。最后我的调试成功了,发的字符串再长也不会被一刀切开了。

你可能感兴趣的:(安卓蓝牙串口中InputStream数据接收不完整,已解决)