gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:28 26 4
gpt4 key购买 nike

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

以下是代码 fragment :-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 手机上测试

enter image description here

尝试读取特征值

enter image description here

有人可以帮我吗?我使用日志,我看到的是,当我单击“读取”按钮时,BluetoothGattServerCallback 没有触发。它必须被触发。提前致谢。

最佳答案

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

使用断点,我发现 BluetoothGattServerCallback 中的 If 条件 始终评估为 false

我在 if 条件下做错的是我将 UUIDString 进行比较,它总是评估为 false。

我必须将 UUIDUUID 进行比较。

更正 if 条件

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

我已经检查过,它工作正常。

关于java - 无法读取从一个 BLE 设备发送到其他设备的特征值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com