安卓藍牙串口中InputStream數據接收不完整,已解決

問題描述

      先描述一下問題,煩了我一段時間。我是在單片機上使用HC05藍牙模塊和安卓手機進行通訊,從手機往單片機發送正常,從單片機往手機發數據總是不完整,一段字符被分成幾段了,安卓的程序用的是谷歌官方的BluetoothChat例程。


分析原因

      

      分析了一下原因,谷歌官方的BluetoothChat讀取線程的代碼如上,是由於安卓程序使用InputStream讀取時不能和串口一樣設置一個結束符(串口的結束符一般是換行符'\r\n'),安卓中線程讀取就很隨機性了,你不知道它在什麼時候就讀完一刀下去,你的字符串就不完整了。

解決方案

      本來想找找InputStream中有沒有結束符這個東西,找了半天也沒找到,所以還是自己寫一個吧。


    就是使用InputStream.read()逐個讀取字符,判讀是不是結束符,如果沒到結束符就一直讀取寫入。

    注意if(ch!=-1)這個判斷不能省,如果什麼也沒讀到就是返回-1,這個時候不能讓字符寫進去。最後我的調試成功了,發的字符串再長也不會被一刀切開了。