无法读取从一个 BLE 设备发送到其他设备的特征值

Not able to read characteristic value sent from one BLE Device to Other

我正在开发 Android 应用程序,它通过 BLE 发送一个字符串来假设“Hello World”。当我从其他 BLE 扫描仪扫描时,我在扫描仪应用程序上获得了服务和特性名称,但无法读取特性的实际值,即“Hello World”。

以下是代码片段:- UUID

public static final String UUID_SENSOR_SERVICE = "0000180f-0000-1000-8000-00805f9b34fb";
public static final String UUID_SENSORS_LEVEL = "00002a19-0000-1000-8000-00805f9b34fb";

正在创建 BluetoothGattService

private BluetoothGattService createService() {
        Log.d(TAG, "createService: ");
        BluetoothGattService service = new BluetoothGattService(UUID.fromString(SimpleGattAtributes.UUID_SENSOR_SERVICE), SERVICE_TYPE_PRIMARY);

        // Counter characteristic (read-only, supports subscriptions)
        BluetoothGattCharacteristic data = new BluetoothGattCharacteristic(UUID.fromString(SimpleGattAtributes.UUID_SENSORS_LEVEL), PROPERTY_READ , PERMISSION_READ);
        service.addCharacteristic(data);
        return service;
    }

正在启动 GattServer

private void startGattServer(Context mContext){
        Log.d(TAG, "startGattServer: ");

        BluetoothGattServerCallback mGattServerCallback =   new BluetoothGattServerCallback() {

            @Override
            public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattCharacteristic characteristic) {
                if (SimpleGattAtributes.UUID_SENSORS_LEVEL.equals(characteristic.getUuid())) {
                    Log.d(TAG, "onCharacteristicReadRequest: I am here");
                    byte[] value = "HelloWorld".getBytes(Charset.forName("UTF-8"));

                   
                    mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, 0, value);
                }
            }
        };


        mGattServer = bluetoothManager.openGattServer(mContext, mGattServerCallback);
        mGattServer.addService(createService());


    }

在 运行 上面的代码之后,当我打开 Scanner 应用程序时,我的应用程序广播了 BLE 信标。但是当我尝试读取我的特征值“Hellow World”时。我没听懂。

在 Android 手机上测试

正在尝试读取特征值

任何人都可以帮助我吗?我使用日志,我看到 BluetoothGattServerCallback 在我单击“读取”按钮时未触发。它必须被触发。 提前致谢。

我找到了解决方案。感谢@davidgyoung

使用断点我发现 BluetoothGattServerCallback 中的 If condition 总是评估为 false

我在 if 条件下做错的是我将 UUIDString 进行比较,结果始终为 false。

我必须比较 UUIDUUID

已更正条件

if(UUID.fromString(SimpleGattAtributes.UUID_SENSORS_LEVEL).equals(characteristic.getUuid())){
    // read logic here
}

我已经检查过了,它运行良好。