我试图使用简单的循环发送超过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);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以发送超过 20 个字节的数据,而无需分成数据块且不存在延迟。您尝试写入的每个特征都分配有一个 MTU 值。它是您一次可以写入的字节数。在连接期间,MTU 值会被交换,您可以一次写入这么多字节。您可以增加服务器端的 mtu 值(最大 512 字节)并一次性发送那么多字节。
对于 Android,您可能需要在使用以下命令连接到服务器后手动请求 mtu
请求Mtu(int mtu)
根据您发送的 mtu 值返回 true 或 false。它将回调 onMtuChanged,其中 Android 设备和服务器协商最大可能的 MTU 值。
onMtuChanged(BluetoothGatt gatt、int mtu、int status)
在此函数中可以设置MTU值,一次可以发送20个以上字节。
小智 5
通过将您的数据分成20个字节的数据包,并sleep()在发送每个数据包之间实现短暂的延迟(即使用),可以轻松实现通过BLE发送20多个字节。
这是我正在处理的项目的一小段代码,该代码以20字节的块的形式将数据以的形式byte[]分成相同的数组(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);
Run Code Online (Sandbox Code Playgroud)
这是如何实现此目标的另外两个很好的解释:
(Stackoverflow)Android:通过BLE发送大于20个字节的数据
| 归档时间: |
|
| 查看次数: |
11291 次 |
| 最近记录: |