Не удается прочитать значение, которое входит в характеристику службы GATT; Не уверен, правильно ли я настроил сервер GATT - PullRequest
0 голосов
/ 03 апреля 2020

BLE это реклама просто отлично. Я могу установить sh соединение с ним, но не могу прочитать значение c характеристики, которое я установил здесь при инициализации сервера GATT.

Это настройка сервера GATT

@ReactMethod
public void startServer(Callback srvCallBack) {
    mBluetoothGattServer = mBluetoothManager.openGattServer(getReactApplicationContext(), mGattServerCallback);
    if (mBluetoothGattServer == null) {
        srvCallBack.invoke(false);
        return;
    }

    BluetoothGattService gattService = new BluetoothGattService(SERVICE_UUID,
            BluetoothGattService.SERVICE_TYPE_PRIMARY);

    BluetoothGattCharacteristic mCharacteristics = new BluetoothGattCharacteristic(SERVICE_UUID, 2, 1);

    String currentDeviceName = BluetoothAdapter.getDefaultAdapter().getName();
    boolean isValAdded = mCharacteristics.setValue(currentDeviceName);

    if (isValAdded == false) {
        Toast.makeText(getReactApplicationContext(), "Can't add value to characteristics.", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(getReactApplicationContext(), "Value added to characteristics.", Toast.LENGTH_SHORT).show();
    }

    boolean isCharAdded = gattService.addCharacteristic(mCharacteristics);

    if (isCharAdded == false) {
        Toast.makeText(getReactApplicationContext(), "Can't add characteristics.", Toast.LENGTH_SHORT).show();
    }

    boolean isServAdded = mBluetoothGattServer.addService(gattService);

    if (isServAdded == true) {
        srvCallBack.invoke(true, gattService.getUuid().toString());
        return;
    }
}

Я не уверен, что проблема в обратном вызове сервера GATT, или это вообще нужно? Вот мой обратный звонок

private BluetoothGattServerCallback mGattServerCallback = new BluetoothGattServerCallback() {
        @Override
        public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
            if (newState == BluetoothProfile.STATE_CONNECTED) {
                return;
            } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
                return;
            }
        }

        @Override
        public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset,
                BluetoothGattCharacteristic characteristic) {
            if (SERVICE_UUID.equals(characteristic.getUuid())) {
                Toast.makeText(getReactApplicationContext(), "Sending device name.", Toast.LENGTH_SHORT).show();
                mBluetoothGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, 0,
                        characteristic.getValue());
            } else {
                Toast.makeText(getReactApplicationContext(), "uuid didn't matched.", Toast.LENGTH_SHORT).show();
            }
        }
    };
...