- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一部 Android 手机充当中央设备,另一部 Android 手机充当外围设备。
我正在从 Central 请求读取外围设备的特性,使用 mBluetoothGatt.readCharacteristic ( characteristic )
上外设,方法
void onCharacteristicReadRequest ( // Bluetooth GATT Server Callback Method
BluetoothDevice device,
int requestId,
int offset,
BluetoothGattCharacteristic characteristic
)
调用,我正在做两件事: 1. 初始化一个byte[]值
,以byte
形式存储String。 2. 使用方法 mGattServer.sendResponse()
向客户端发送响应。
@Override public void onCharacteristicReadRequest (
BluetoothDevice device, int requestId, int offset,
BluetoothGattCharacteristic characteristic ) {
super.onCharacteristicReadRequest ( device, requestId, offset, characteristic );
String string = "This is a data to be transferred";
byte[] value = string.getBytes ( Charset.forName ( "UTF-8" ) );
mGattServer.sendResponse ( device, requestId, BluetoothGatt.GATT_SUCCESS, 0, value );
}
我的问题是,当我从中央设备发出一次读取请求时,上述方法被多次调用。
因此,我在中央设备上获取的数据类似于
这是要传输的数据这是要传输的数据这是...
我也尝试过其他特性。但是对于那些,回调方法被调用一次。
你能指出我哪里做错了吗?
编辑:从外围设备,我调试过我正在发送 32 字节的数据。当我将 string
值从 This is a data to be transferred
更改为 DATA
时,方法 onCharacteristicReadRequest()
调用仅一次。
对字段 string
的进一步实验使我得出结论,即响应中要发送的最大字节数是 21 字节。如果是这样,那我应该如何从GATT Server发送response,让Central Device才能得到准确的数据呢?
最佳答案
在android中如何处理大文本
private String data = "123456789123456789123xx";
让上面是你的文字
接下来就是onCharacteristicReadRequest()的实现
@Override
public void onCharacteristicReadRequest(BluetoothDevice device,
int requestId, int offset,
BluetoothGattCharacteristic characteristic) {
super.onCharacteristicReadRequest(device, requestId, offset, characteristic);
byte value[] = data.getBytes();
value = Arrays.copyOfRange(value,offset,value.length);
gattServer.sendResponse ( device, requestId,
BluetoothGatt.GATT_SUCCESS, offset, value );
}
所以基本上在每次调用偏移量时都会传输数据量,因此在下次调用此方法时,您应该只发送偏移量到数据长度
这与@Вадзім Жукоўскі 所说的相同,但对于 C#
感谢@Вадзім Жукоўскі 指出这一点
关于android - BluetoothGattServerCallback : onCharacteristicReadRequest() called multiple times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46317971/
我有一部 Android 手机充当中央设备,另一部 Android 手机充当外围设备。 我正在从 Central 请求读取外围设备的特性,使用 mBluetoothGatt.readCharacter
我是一名优秀的程序员,十分优秀!