繁体   English   中英

如何在 Android BLE 特性中以兆字节为单位发送数据?

[英]How to send data in megabytes in Android BLE characteristic?

我制作了一个可以在 Arduino 和手机之间进行通信的应用程序。 但是我有一个问题,就是一个特性只能发送几个字母。

 public boolean writeData(BluetoothGattCharacteristic characteristic, byte[] data){
        if(btAdapter == null || btGatt == null){
            logAdapter.add("BluetoothAdapter not initialized.");
            return false;
        }
        characteristic.setValue(data);
        return btGatt.writeCharacteristic(characteristic);
    }

如果数据超过 1MB,我是否必须制作更多的 BluetoothGattcharacteristic 并添加 BluetoothGattService? 还是有另一种更好的方法让它工作?

如果你想做这样的事情,你将不得不创建一些包装逻辑。 特征遵循属性的基本规则,最大长度为 512 字节,但一次只能传输 20 字节。

你可以做的是设置一对特征

  • 一个“传输”供您将字节写入
  • 如果接收器准备好处理更多字节,则可以发出一个“信号”。

读取信号后,如果它是“Ready”(表示阅读器已准备好),您可以将信号设置为“Not Ready”并将您的字节写入传输之一,以便接收器可以处理它们。

处理后,您的接收器可以再次将信号设置为“就绪”并冲洗并重复。

为了将您的数据帧彼此区分开来,您可以使用第一个字节作为“计数器”/“id”,每次传输都会递增,这样读者就可以知道何时实际写入了新数据。

但是按照基本思想,您可以对实现进行任意数量的变化。

(请注意,BLE 和特性并不是真正为这种批量数据传输而设计的,所以虽然您当然可以创建一个实现,但它可能会对您的电池寿命产生巨大影响。如果您首先使用电池: ))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM