我有一部 Android 手机充当中央设备,另一部 Android 手机充当外围设备。
从 Central,我请求读取 Peripheral 的特征,使用mBluetoothGatt.readCharacteristic ( characteristic )
在外围设备上,方法
void onCharacteristicReadRequest ( // Bluetooth GATT Server Callback Method
BluetoothDevice device,
int requestId,
int offset,
BluetoothGattCharacteristic characteristic
)
调用,我正在做两件事: 1. 初始化 abyte [] value
以将字符串存储在byte
表单中。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 );
}
我的问题是,当我从中央设备发出一次读取请求时,上述方法会被多次调用。
因此,我在中央设备上获取数据就像
This is a data to be transferredThis is a data to be transferredThis is a...
我也尝试过其他特性。但是对于那些,回调方法被调用一次。
你能指出我哪里做错了吗?
编辑:从外围设备,我已经调试我正在发送 32 字节的数据。当我将string
值从更改This is a data to be transferred
为 时DATA
,该方法onCharacteristicReadRequest()
仅调用一次。
对该领域的进一步实验string
使我得出结论,响应中要发送的最大字节数为 21 字节。如果是这种情况,那么我应该如何从 GATT Server 发送响应,以便 Central Device 只能获取准确的数据?