使用Android BLE读取特征值

时间:2018-03-24 17:17:21

标签: android bluetooth bluetooth-lowenergy characteristics

我对BLE,android开发和java相对较新。我试图通过BLE将20个数据从微控制器发送到我的Android手机。使用nRF连接应用程序,我知道正在从微控制器正确创建服务和值。

要在Android应用程序上阅读它们,我使用Android Studio中提供的模板BluetoothLeGatt应用程序。它向我展示了服务和特性(由于某种原因,它显示的服务比我实际创建的多),但是只有一个服务向我显示最终不是NULL的值。  我在我的微控制器中编码了值0x22,Android Log说明了以下内容

03-24 17:13:29.498 23696-23696/com.example.android.bluetoothlegatt D/BLE_VALUE_READ: [B@b95cc24

而不是0x22。这是使用函数

Log.d("BLE_VALUE_READ", String.valueOf(characteristic.getValue()));

我已将命令放在模板应用程序的此函数中。

public void readCharacteristic(BluetoothGattCharacteristic characteristic) {
    if (mBluetoothAdapter == null || mBluetoothGatt == null) {
        Log.w(TAG, "BluetoothAdapter not initialized");
        return;
    }
    mBluetoothGatt.readCharacteristic(characteristic);
    Log.d("CharacteristicRead", String.valueOf(characteristic)); // try to get characteristic uuid?
    Log.d("BLE_VALUE_READ", String.valueOf(characteristic.getValue())); // Try to read value
}

如何获得服务/特性中的实际值,即0x22? 我想要总共读取20个值,然后将它们作为浮点值存储在数组中,以便最终将它们用于图像重建。

非常感谢任何帮助。

谢谢!

1 个答案:

答案 0 :(得分:1)

characteristic.getValue()返回一个字节数组。您需要将字节转换为所需的格式。

但是在调用readCharacteristic之后,您需要等待onCharacteristicRead回调才能提取值。