Hi all:
在主机(android手机)连续发送100个字节的数据,我先把它分成5个数据包,然后连续发送,发送代码如下:
do{
if(len <= 20)
System.arraycopy(tmp, 2, WriteBytes, 0, len – 2);
else
{
System.arraycopy(tmp, 2 + flags, WriteBytes, 0, 20); flags += 20;
} len -= 20;
characteristic.setValue(value[0],
BluetoothGattCharacteristic.FORMAT_UINT8, 0);
characteristic.setValue(WriteBytes);
mBluetoothLeService.writeCharacteristic(characteristic);
}while(len > 0);
但是在接收的时候,一直接到一包数据,而且用串口打印的时候打印了两次;
我感觉发送的时候不能这样连续发?谢谢解答呀!
Yan:
hewu,
主机发送的write请求,是需要等slave回复之后才能再次发送。
除非用write without response…
hua huamao:
楼上正解,主机读写数据的时候,需要从机的允许,然后通过读写回调函数来发送数据,而且必须要和相应的服务UUID、特征值的UUID对应,数据长度一致才可以的。所以连续发送,相应的在从机那边要做好对应的设置。
hewu:
回复 Yan:
Hi Yan:
两个模块之间串口透传已经调通,但是手机和模块之间的还没有调通,问题是android这边不晓得这个slave回复的是什么,怎么来判断一包已经传送完成,可以传送下一包数据,Ti有没有类似的app demo供参考呢?
sanming li:
楼主,我也遇到了这样的问题,我的android是从机,主机每隔100ms发送一个数据包,android这边通过蓝牙接收数据,正常情况下数每隔100ms蓝牙接收到一个数据,但是有些时候蓝牙接收了两个相同的数据,我是通过log打印出来的,在界面上打印了两次,请问您知道这是什么原因吗?
yi zhang23:
安卓系统连带响应的write都没有流控机制?不至于这么弱吧。。。
即使没有流控,连续写5个数据包也不至于缓存承载不了吧,2541还能缓存4个呢。。
至于接收到两遍就更无法理解了,期待大神解答。