Не удается получить характеристику чтения после записи в BLE Android

Я работаю над устройством BLE. - Я могу подключить это устройство к приложению с помощью BluetoothGATT. - Я могу впервые прочитать все услуги, характеристики и данные рекламодателя, как только подключиться к BluetoothGatt. - У нас есть две характеристики: одну нам нужно прочитать, а другую - написать, я умею писать характеристику.

Но проблема в том, что я не могу прочитать характеристику после записи. В соответствии с моим пониманием

        @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic)

or

        @Override
    public void onCharacteristicRead(BluetoothGatt gatt,
                                     BluetoothGattCharacteristic characteristic,
                                     int status)

Должен автоматически вызываться, это метод обратного вызова

Мой характерный код записи:

boolean status = mBluetoothGatt.setCharacteristicNotification(characteristic, state);

Я также включаю уведомление с помощью кода ниже

        mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);

Я не могу ответить на вопрос "Характеристики чтения" после того, как написал

Любая помощь ценна, заранее благодарю, дорогая, я застрял на 3 дня в этом вопросе.


person DynamicMind    schedule 15.07.2018    source источник


Ответы (1)


onCharacteristicRead () и onCharacteristicChanged () не вызываются автоматически.

onCharacteristicRead запускается, когда вы вызываете характеристику .getValue (). Что-то вроде этого:

BluetoothGattCharacteristic charac = ... ;
byte[] messageBytes = charac.getValue();

Где character содержит характеристику, которую вы пытаетесь прочитать, а messageBytes - значение, прочитанное из характеристики.

onCharacteristicChanged вызывается после включения уведомлений. Похоже, вы не включаете уведомления полностью.

public static String CLIENT_CONFIGURATION_DESCRIPTOR_STRING = "00002902-0000-1000-8000-00805f9b34fb";

...

            mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);

            BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                    UUID.fromString(CLIENT_CONFIGURATION_DESCRIPTOR_STRING));
            descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
            mBluetoothgatt.writeDescriptor(descriptor);

Вам нужно добавить вызов writeDescriptor, чтобы успешно включить уведомления.

person Divyam Khandelwal    schedule 16.07.2018