0

我正在尝试在具有以下字段的设备中使用 Android 中的 BLE:电池 (RO)、状态 (RO)、强度 (R/W)。我遵循了一些关于使用设备设置 Gatt 的教程。我使用以下代码:

public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.w(LOGGER + mOwner.get().getName(), "onServicesDiscovered received: " + status);
if (status == BluetoothGatt.GATT_SUCCESS) {
    // Save all services
    for (BluetoothGattService gattService : mBluetoothGatt.getServices()) {
        for (BluetoothGattCharacteristic charac : gattService
                .getCharacteristics()) {
            if (isContained(charac) {
                mCharacteristics.set(mCharacteristicsUuid.indexOf(charac.getUuid()
                        .toString()), charac);
                    mBluetoothGatt.setCharacteristicNotification(charac, true);
                    // UUID for notification
                    BluetoothGattDescriptor descriptor = charac
                            .getDescriptor(UUID.fromString("00002902-0000-1000-" +
                                    "8000-00805f9b34fb"));
                    if (descriptor != null) {
                        descriptor.setValue(BluetoothGattDescriptor
                                .ENABLE_NOTIFICATION_VALUE);
                        mBluetoothGatt.writeDescriptor(descriptor);
                    }
            }
        }
    }

所以我尝试发现服务,如果完成了对它们的迭代,以及它们的特征。如果他们的 UUID 正确,我将它们添加到 mCharacteristics。如果这是一个可读的值(这里是每个人),我启用通知。

完成后,我尝试进行第一次阅读:

Log.e(LOGGER + mOwner.get().getName(), "Reading first charac(index=0) : " + mBluetoothGatt
            .readCharacteristic(mCharacteristics.get(0)));
}

我必须明确指出,所有这些都在一个专用线程中,并保存在一个 Android 服务中。我确定设备已连接,并且特性也已连接。对于每一个我验证了(属性和可重复)的值,始终 > 0 ...但是永远不会调用 onCharacteristicRead(),并且 getValue() 方法返回 null。

我在 Android 中使用 BLE 比较新。

有人对这个问题有想法吗?提前致谢 !

编辑:我终于找到了解决方案,但没有像我预期的那样......事实上,如果我将通知设置为启用,之后我将无法读取特征..​​....有人可以告诉我如何以这种方式执行:

> 1) on discover
>     a) get all characts + set in list characs I want
>     b) enable notification for ALL of these charac (if possible, I supposed, because of the descriptor that can be null ? )
>     c) first read to know starting values
4

1 回答 1

3

你在这里有答案:BLE Android, can't enable more than 1 notify on read features

您必须等待 GATT 操作完成,然后才能执行另一项操作。

于 2017-04-27T12:57:21.837 回答