Невозможно прочитать измерение с моего устройства BLE, writeCharacteristic всегда возвращает false - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь прочитать данные, взятые из шкалы BLE после измерения.Если я пытаюсь прочитать название модели, все работает.

Pearing правильно.Я правильно получаю сообщение с подтверждением на дисплее об успешной установке даты.После измерения устройство предоставляет сервисы, и я использую простую кнопку для запуска соединения через адрес.

buttonConnect.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String deviceAddress = "B4:99:4C:6E:20:68";
            BluetoothDevice device =  getBluetoothAdapter(getApplicationContext()).getRemoteDevice(deviceAddress);
            connectToDevice(device, false);
        }
    }); 

соединение через GATT

public void connectToDevice(BluetoothDevice device, boolean pairing) {

        if (mGatt == null) {
            mGatt = device.connectGatt(this, false, gattCallbackNoPairing);

    }
}

метод callBack, вызываемый connectGatt

private final BluetoothGattCallback gattCallbackNoPairing = new BluetoothGattCallback() {
    @Override
    public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
        Log.i("onConnectionStateChange", "Status: " + status);
        switch (newState) {
            case BluetoothProfile.STATE_CONNECTED:
                Log.i("gattCallback", "STATE_CONNECTED");
                gatt.discoverServices();

                break;
            case BluetoothProfile.STATE_DISCONNECTED:
                Log.e("gattCallback", "STATE_DISCONNECTED");
                break;
            default:
                Log.e("gattCallback", "STATE_OTHER");
        }
    }
    @Override
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        Log.i("Callback", "onServicesDiscovered");

        BluetoothGattCharacteristic characteristic = gatt.getService(ADGattUUID.WeightScaleService).getCharacteristic(ADGattUUID.WeightScaleMeasurement);
        BluetoothGattDescriptor descriptor = characteristic.getDescriptor(ADGattUUID.ClientCharacteristicConfiguration);

        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        boolean result = gatt.writeDescriptor(descriptor);
         Log.i("writeDescriptor", String.valueOf(result));
    }

Когда я прихожу к этому моменту и выполняю writeCharacteristic, я всегда получаю ложь

    @Override
    public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor,
                                  int status) {
        Log.i("Callback", "onDescriptorWrite");
        BluetoothGattCharacteristic characteristic = gatt.getService(ADGattUUID.WeightScaleService).getCharacteristic(ADGattUUID.WeightScaleMeasurement);
        characteristic.setValue(new byte[]{1, 1});
        boolean result1 = gatt.writeCharacteristic(characteristic);
        Log.i("writeCharacteristic", String.valueOf(result1));
    }

    @Override
    public void onCharacteristicChanged(BluetoothGatt gatt,
                                        BluetoothGattCharacteristic
                                                characteristic) {
        Log.i("Callback", "onCharacteristicChanged");
        Log.i("onCharacteristicChanged", new String(characteristic.getValue()));

    }
};

Действительно, в документации это обозначено как «Указать».Так как мне восстановить эти данные?

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...