阅读特征和设置通知之间的区别

时间:2016-08-11 06:09:16

标签: android bluetooth-lowenergy

您好我正在使用我的Android应用程序中的蓝牙低功耗 每当我在应用程序中调用readCharacter()时,我都能够阅读这些特征 但我想启用一个通知,以便在有数据可用时我可以阅读。 目前我正在使用以下方法。

private byte[] readCharacteristic(){
 if(!isReadEnabled){
        enableTXNotification();
        isReadEnabled = true;
    }

    byte[] arr = new byte[CHUCK_SIZE];
    BluetoothGattService RxService = mBluetoothGatt.getService(RX_SERVICE_UUID);
    if(RxService == null){
        broadcastUpdate(BLUETOOTH_EVENT_SERVICES_NOT_SUPPORTED);
        return arr;
    }
    BluetoothGattCharacteristic TxChar = RxService.getCharacteristic(TX_CHAR_UUID);
    if(TxChar == null){
        broadcastUpdate(BLUETOOTH_EVENT_SERVICES_NOT_SUPPORTED);
        return arr;
    }
    arr = TxChar.getValue();
    Log.d(TAG,Arrays.toString(arr));
    return arr;
}

这是我的enableTXNotification()

private void enableTXNotification(){
    if (mBluetoothGatt == null) {
        broadcastUpdate(BLUETOOTH_EVENT_SERVICES_NOT_SUPPORTED);
        return;
    }

    BluetoothGattService RxService = mBluetoothGatt.getService(RX_SERVICE_UUID);
    if (RxService == null) {
        broadcastUpdate(BLUETOOTH_EVENT_SERVICES_NOT_SUPPORTED);
        return;
    }
    BluetoothGattCharacteristic TxChar = RxService.getCharacteristic(TX_CHAR_UUID);
    if (TxChar == null) {
        broadcastUpdate(BLUETOOTH_EVENT_SERVICES_NOT_SUPPORTED);
        return;
    }
    mBluetoothGatt.setCharacteristicNotification(TxChar,true);
    BluetoothGattDescriptor descriptor = TxChar.getDescriptor(CCCD);
    descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
    mBluetoothGatt.writeDescriptor(descriptor);
}

所以我的问题是启用通知和阅读特征之间的区别是什么?

如何在数据可用时收到通知

1 个答案:

答案 0 :(得分:4)

- 阅读特征 请求读取给定的BluetoothGattCharacteristic。读取结果通过BluetoothGattCallback异步报告。它为onCharacteristicRead提供结果。它用于获取存储在特定传感器中的byte []。就像你有TEMPERATURE_NOTIFY_CHARACTERISTIC_UUID_STRING并且你读了特征你会得到byte [](Arrays.toString(characteristic.getValue()))

 public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAG, "BluetoothAdapter not initialized");
        return;
    }
    mBluetoothGatt.readCharacteristic(characteristic);
}

- 启用通知 BLE应用程序通常要求在设备上的特定特征发生变化时收到通知。此代码段显示了如何使用setCharacteristicNotification()方法设置特征的通知:

private BluetoothGatt mBluetoothGatt;
BluetoothGattCharacteristic characteristic;
boolean enabled;
...
mBluetoothGatt.setCharacteristicNotification(characteristic, enabled);
...
BluetoothGattDescriptor descriptor = characteristic.getDescriptor(
UUID.fromString(SampleGattAttributes.CLIENT_CHARACTERISTIC_CONFIG));
descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
mBluetoothGatt.writeDescriptor(descriptor);