Do not receive BLE notifications in Android

I am working with a BLE device in ANDROID.

Here I set the endpoint 0000fff4-0000-1000-8000-00805f9b34fb to receive notifications (CLIENT_CHARACTERISTIC_CONFIG - 00002902-0000-1000-8000-00805f9b34fb

 public void k2DigitalNotification(BluetoothGattCharacteristic characteristic,
                               boolean enabled)
{
    Boolean myStatus;

    if (MY_BLUETOOTH_SERVICE.equals(characteristic.getUuid()))
    {
        Log.v(TAG, "Characteristic: " + characteristic.getUuid());

        BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
                UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        myStatus = mBluetoothGatt.writeDescriptor(descriptor);
        Log.v(TAG,"Write Status::"+myStatus);
        bluetoothGatt.setCharacteristicNotification(characteristic, true);

    }
}

Here is the code that I write to the device. IT WORKS! 100%, data appears on the integrated BLE device. (endpoint 0000fff1-0000-1000-8000-00805f9b34fb)

   public void k2digitalWriteToCharacteristic(BluetoothGattCharacteristic characteristic) {
    if (BLE_ENDPOINT.equals(characteristic.getUuid()))
    {

        Log.v(TAG,"0Xfff1");

        byte[] data3Send = new byte[4];
        data3Send[0] = 0x31;
        data3Send[1] = 0x01;
        data3Send[2] = 0x5a;
        data3Send[2] = 0x0d;;

        characteristic.setValue(data3Send);
        boolean status = mBluetoothGatt.writeCharacteristic(characteristic);
        Log.v(TAG, "Status is:" + String.valueOf(status));
    }
}

The BLE device is sending data ... I tested it in applications like nRFMaster from Nordic Semi or BLEScanner from Bluepixel.

But I NEVER see a callback.

        public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic characteristic) {
        Log.v(TAG,"A Characteristic Change?!?!?!");
        byte[] data = characteristic.getValue();
        Log.v(TAG,"Here is the data: "+data[0]);
        broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
    }

Any help? I've been banging my head against the wall all week.

+4
source share
1 answer

, . , . , :

Boolean status = bluetoothGatt.writeDescriptor(descriptor);

true, writeDescriptor false - , , .

0

Source: https://habr.com/ru/post/1620698/


All Articles