中央デバイスとして機能する 1 つの Android Phone と、周辺機器として機能する別の Android Phone があります。
Central から、Peripheral の特性を読み取るように要求しています。mBluetoothGatt.readCharacteristic ( characteristic )
ペリフェラルに、メソッド
void onCharacteristicReadRequest ( // Bluetooth GATT Server Callback Method
BluetoothDevice device,
int requestId,
int offset,
BluetoothGattCharacteristic characteristic
)
1.文字列をフォームbyte [] value
に格納するために a を初期化します。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 );
}
ここでの問題は、セントラル デバイスから一度読み取り要求を行ったときに、上記のメソッドが複数回呼び出されることです。
このため、Central デバイスでデータを次のように取得しています。
This is a data to be transferredThis is a data to be transferredThis is a...
他の特性も試しました。しかし、それらの場合、コールバック メソッドは 1 回呼び出されます。
私が間違っているところを教えてもらえますか?
EDIT : Peripheral から、32 バイトのデータを送信していることをデバッグしました。string
値を からに変更This is a data to be transferred
するDATA
と、メソッドonCharacteristicReadRequest()
は 1 回だけ呼び出します。
このフィールドをさらに実験したstring
結果、応答で送信される最大バイト数は 21 バイトであるという結論に達しました。この場合、Central Device が正確なデータのみを取得できるようにするには、GATT サーバーからの応答をどのように送信すればよいですか?