У меня есть какое-то конкретное устройство BLE
, которое имитирует сокетное соединение по двум характеристикам - запись и чтение. Поэтому, если вы напишете какую-либо команду для характеристики «запись», характеристика «чтение» даст вам ответ посредством уведомления.
Это работает правильно, когда я использую Bluetooth-терминал nRF Connect
. Но когда я пытаюсь повторить это с помощью Android
API, устройство не отвечает на команду.
Я создаю BluetoothGattCallback
объект и начинаю соединяться с моим устройством:
BluetoothGattCallback callback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
if (newState == BluetoothProfile.STATE_CONNECTED) {
gatt.discoverServices();
}
}
@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
BluetoothGattService cccdService = gatt.getService(UUID.fromString("00001801-0000-1000-8000-00805f9b34fb"));
BluetoothGattCharacteristic cccdCharacteristic = cccdService.getCharacteristic(UUID.fromString("00002a05-0000-1000-8000-00805f9b34fb"));
BluetoothGattService deviceService = gatt.getService(UUID.fromString("569a1101-b87f-490c-92cb-11ba5ea5167c"));
BluetoothGattCharacteristic writeCharacteristic = deviceService.getCharacteristic(UUID.fromString("569a2001-b87f-490c-92cb-11ba5ea5167c"));
BluetoothGattCharacteristic readCharacteristic = deviceService.getCharacteristic(UUID.fromString("569a2000-b87f-490c-92cb-11ba5ea5167c"));
BluetoothGattCharacteristic c2002 = deviceService.getCharacteristic(UUID.fromString("569a2002-b87f-490c-92cb-11ba5ea5167c"));
gatt.setCharacteristicNotification(cccdCharacteristic, true);
gatt.setCharacteristicNotification(readCharacteristic, true);
gatt.setCharacteristicNotification(c2002, true);
gatt.requestConnectionPriority(BluetoothGatt.CONNECTION_PRIORITY_HIGH);
// makeHeader is method that create byte request
writeCharacteristic.setValue(makeHeader((byte) 1, (byte) 1, MemoConstDdin.DATA, (short) 1000));
gatt.writeCharacteristic(writeCharacteristic);
}
@Override
public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
super.onCharacteristicChanged(gatt, characteristic);
displayResponse(characteristic);
}
};
gatt = device.connectGatt(this, false, callback);
Соединение установлено успешно. Услуги найдены. Уведомления включены. Напишите характеристику успешно. Но. Метод onCharacteristicChanged
никогда не вызывается для характеристики «чтения».
Что не так с этим кодом или со мной?
Любая идея.
Спасибо!