Уведомления о периферийном режиме Android BLE GATT

Я пытаюсь настроить приложение для работы в качестве периферийного устройства BLE с помощью API Android 5.0 (21). До сих пор я настроил сервер, установил работу рекламы и подключений, настроил пользовательские службы и характеристики GATT и мог читать и писать между периферийным устройством и другими устройствами тестирования. Сейчас я пытаюсь добавить уведомления к нескольким параметрам, но проще говоря; они не работают.

При определении этих характеристик они включают свойство notify:

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);

В моемBluetoothGattServerCallbackЯ включил метод:

@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);
}

который я ожидаю, чтобы записывать сообщение «Descriptor write:» всякий раз, когда клиент включает уведомления (или пишет в любой дескриптор по этому вопросу); но ни одно такое сообщение никогда не регистрируется (и при этом отладчик никогда не попадает в эту функцию).

Позже я попытаюсь отправить уведомления, используя:

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

Который, хотя это обновляет значение; он не отправляет уведомление подключенному клиенту.

Я протестировал это с помощью Android 6.0.1 на Nexus 5X (к сожалению, единственное устройство Android, с которым я могу тестировать). Существует не так много примеров использования API периферийных устройств / BluetoothGattServer, поэтому я немного растерялся. Есть какой-то метод, который я забыл вызвать, или что-то, что мне нужно сделать в недокументированном порядке, чтобы заставить работать уведомления?

Любая помощь будет принята с благодарностью!

Ответы на вопрос(1)

Ваш ответ на вопрос