如何在android中发送超过20个字节的数据?

Nik*_*Nik 6 android bluetooth

我试图使用简单的循环发送超过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个字节的数据

(北欧半)通过BLE处理大数据包