在ble上写字后没有调用onCharacteristicChanged

时间:2018-06-01 05:28:04

标签: android bluetooth-lowenergy

我需要Ble的一些响应数据。当我在写一些东西时,我需要阅读Ble的响应数据。我能够成功启用和禁用我的ble设备,但只能从ble中丢失响应数据。我还需要将十进制时间转换为整数十六进制格式,如60分钟转换为0x3c。

private BluetoothGattCallback gattCallback= new BluetoothGattCallback() {

        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onServicesDiscovered(BluetoothGatt gatt, int status) {
            super.onServicesDiscovered(gatt,status);
            clientGatt =gatt;
            if (status == BluetoothGatt.GATT_SUCCESS) {
                BluetoothGattService service = gatt.getServices().get(2);
                List<BluetoothGattCharacteristic> gattCharacteristics = service.getCharacteristics();
                for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {

                    if (gattCharacteristic.getUuid().toString().equalsIgnoreCase(AppConstant.RECEIVE_UUID)) {
                        readCharacteristic=gattCharacteristic;
                    }
                    if (gattCharacteristic.getUuid().toString().equalsIgnoreCase(AppConstant.SEND_UUID_STR)) {
                        writeCharacteristic = gattCharacteristic;
                    }
                }
            }

        }
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
            super.onCharacteristicRead(gatt,characteristic,status);
            LogUtils.errorLog("onCharacteristicRead", "@@: "+characteristic.getValue()[0]);

        }
        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic) {
            super.onCharacteristicChanged(gatt, characteristic)

        }

        @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
            super.onCharacteristicWrite(gatt, characteristic, status);

            setCharacteristicNotification(characteristic,true);
        }

        @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            super.onConnectionStateChange(gatt, status, newState);

            clientGatt = gatt;

            switch (newState) {
                case BluetoothProfile.STATE_CONNECTED:
                    isBLE_Connected=true;
                    gatt.discoverServices();

                    break;
                case BluetoothProfile.STATE_DISCONNECTED:
                    isBLE_Connected=false;
                    if(status==133 || status==22 || status==62){
                        refreshDeviceCache();
                        clientGatt.discoverServices();
                    }else{
                        clientGatt.disconnect();
                        clientGatt.close();
                    }
                    break;
            }

        }
    };

2 个答案:

答案 0 :(得分:1)

在调用onCharacteristicChanged之前,您必须启用通知。 有些像:

   //Enable local notifications
    gatt.setCharacteristicNotification(characteristic, true);
    //Enabled remote notifications
    BluetoothGattDescriptor desc =characteristic.getDescriptor(CONFIG_DESCRIPTOR);
    desc.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
    gatt.writeDescriptor(desc);

应该有帮助。

答案 1 :(得分:0)

当您在 BluetoothGattDescriptor 的帮助下撰写有关特征的内容时

  

Mike的回答

您需要覆盖以下方法以收听已完成的更改,然后您可以阅读以下特征:

 @Override
public void onDescriptorWrite(BluetoothGatt gatt, BluetoothGattDescriptor descriptor, int status) {
    super.onDescriptorWrite(gatt, descriptor, status);
    Log.d(TAG, "onDescriptorWrite :" + ((status == BluetoothGatt.GATT_SUCCESS) ? "Sucess" : "false"));
}