Notificações do modo periférico BLE GATT para Android

Estou tentando configurar um aplicativo para se comportar como um dispositivo periférico BLE usando a API do Android 5.0 (21). Até agora, configurei o servidor, coloquei publicidade e conexões em funcionamento, configurei serviços e características personalizadas do GATT e posso ler e escrever entre o dispositivo periférico e outros dispositivos de teste. Agora estou tentando adicionar notificações a alguns dos parâmetros, mas basta colocar; eles não estão trabalhando.

Ao definir essas características, elas incluem a propriedade de notificação:

BluetoothGattService battService = new BluetoothGattService(BatteryProfile.UUID_BATTERY_SERVICE, BluetoothGattService.SERVICE_TYPE_PRIMARY);

BluetoothGattCharacteristic batteryLevelCharacteristic =
        new BluetoothGattCharacteristic(BatteryProfile.UUID_BATTERY_LEVEL,
                BluetoothGattCharacteristic.PROPERTY_READ | BluetoothGattCharacteristic.PROPERTY_NOTIFY,
                BluetoothGattCharacteristic.PERMISSION_READ);
battService.addCharacteristic(batteryLevelCharacteristic);

mGattServer.addService(battService);

No meuBluetoothGattServerCallback, Incluí o método:

@Override
public void onDescriptorWriteRequest(BluetoothDevice device, int requestId, BluetoothGattDescriptor descriptor, boolean preparedWrite, boolean responseNeeded, int offset, byte[] value) {
    Log.d(TAG, "Descriptor write: " + descriptor.toString());
    if (responseNeeded) {
        mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, 0, value);
    }
    super.onDescriptorWriteRequest(device, requestId, descriptor, preparedWrite, responseNeeded, offset, value);
}

que espero registrar a mensagem "Gravação do descritor:" sempre que um cliente ativar notificações (ou gravar em qualquer descritor para esse assunto); mas nenhuma dessas mensagens é registrada (o depurador nunca entra nessa função).

Mais tarde, tento enviar notificações usando:

BluetoothGattCharacteristic batteryLevelCharacteristic = service.getCharacteristic(BatteryProfile.UUID_BATTERY_LEVEL);
batteryLevelCharacteristic.setValue(new byte[]{ mBatteryLevel });
mGattServer.notifyCharacteristicChanged(mConnectedDevice, batteryLevelCharacteristic, false);

Qual, embora atualize o valor; ele não envia uma notificação para o cliente conectado.

Testei isso usando o Android 6.0.1 em um Nexus 5X (infelizmente, o único dispositivo Android que tenho disponível para testar). Não há realmente muitos exemplos de uso da API periférica / BluetoothGattServer por aí, então estou um pouco perdido. Existe algum método para o qual estou esquecendo de ligar ou algo que preciso fazer em alguma ordem não documentada para que as notificações funcionem?

Qualquer ajuda seria muito apreciada!

questionAnswers(1)

yourAnswerToTheQuestion