Android BLE,setCharacteristicNotification()不起作用

时间:2016-10-28 08:47:40

标签: android bluetooth-lowenergy

我的设备上有6个特征。其中一个需要通知才能发送数据。我注册了这样的特征:

  private void registerEnvironmentCharacteristics(List<BluetoothGattCharacteristic> characteristics) {
        for (BluetoothGattCharacteristic characteristic : characteristics) {
            UUID characteristicUuid = characteristic.getUuid();
            if (Characteristics.TEMPERATURE_CHARACTERISTIC_UUID.equals(characteristicUuid))
                temperatureCharacteristic = characteristic;
            flipNotifications(temperatureCharacteristic,true);
        }
    }

这是setCharacteristicNotification的翻转方法:

 private void flipNotifications(BluetoothGattCharacteristic characteristic, boolean enable) {
        boolean notifications = bluetoothGatt.setCharacteristicNotification(characteristic, enable);
        BluetoothGattDescriptor descriptor = characteristic.getDescriptor(Characteristics.CONFIGURATION_DESCRIPTOR_UUID);
        descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
        bluetoothGatt.writeDescriptor(descriptor);
        BluetoothCommunicationManager.getInstance().add(new DescriptorCommand(descriptor, bluetoothGatt, enable ? BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE : BluetoothGattDescriptor.DISABLE_NOTIFICATION_VALUE));

    }

当我从registerEnvironment中删除flipNotification()方法时,我从设备中获取5个特征(没有这个通知),但是当我添加flipNotification时,我在所有特征上都为空。知道我做错了什么吗?这是我的方法:

 public void readTemperature() {
        BluetoothCommunicationManager.getInstance().add(new WriteCharacteristicCommand(temperatureCharacteristic, bluetoothGatt, SINGLE_READ_COMMAND));
    }

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

Android BLE只支持一个特有的写/读操作,你可以这样做,首先调用serviceDiscovery方法,你会得到OnServiceDiscovery的结果,在这里你需要将所有特性添加到List或ArrayList变量中,并设置一个通知再见一次,一旦你写了一次charastristric的通知,调用了onDescriptorWrite方法,你就可以从数组中删除那个特征值,并再次为列表顶部值设置setNotification。

1)使用FIFO队列或优先级队列取决于您的业务逻辑

2)插入您想要阅读的所有特征

3)调用您的requestCharacteristics方法,以便它可以开始使用您的队列

4)从你的onCharacteristicsRead调用看看队列的大小是否大于零请求一个..一定要从这里偷看()

5)现在你的requestCharacteristics方法执行poll()并请求BLE GATT的特征。

检查此答案对您有帮助。

https://stackoverflow.com/a/33890391/4657707