我试图使用简单的循环发送超过33个字节,是否有人知道如何通过android ble发送超过20个字节的数据.
if(!mConnected) return;
for (int i = 0; i<str.length;i++) {
if(str[i] == str[str.length -1]){
val = str[i]+"\n";
}else {
val = str[i] + "_";
}
System.out.println(val);
mBluetoothLeService.WriteValue(val);
}
解决方法:
通过将数据分成20字节数据包并在发送每个数据包之间实现短延迟(即使用sleep()),可以轻松实现通过BLE发送超过20个字节.
这是我正在处理的项目的一小段代码,它以byte []的形式获取数据,并以20字节的块的形式将其拆分为相同的数组(byte [] []),然后发送它是另一种逐个传输每个数据包的方法.
int chunksize = 20;
byte[][] packets = new byte[packetsToSend][chunksize];
int packetsToSend = (int) Math.ceil( byteCount / chunksize);
for(int i = 0; i < packets.length; i++) {
packets[i] = Arrays.copyOfRange(source,start, start + chunksize);
start += chunksize;
}
sendSplitPackets(packets);
以下是另外两个关于如何实现这一目标的非常好的解释:
(*) Android: Sending data >20 bytes by BLE
(Nordic Semi) Dealing Large Data Packets Through BLE