解码BLE GattServices数据

时间:2018-04-16 18:08:46

标签: android bluetooth-lowenergy

我在Android Studio中实现BLE。我已经连接外围设备了。在我的onServicesDiscovered方法中,我想分析服务(和特性),当我打印出来时,我得到类似下面的内容:

android.bluetooth.BluetoothGattService@41b6dd18

列表中有4个服务,除了最后的数字外,它们看起来都很相似。如何将其转换为有用的信息。我没有看到这种格式的参考。

感谢。

2 个答案:

答案 0 :(得分:1)

尝试从BluetoothGattService对象中读取uuid。

您可以在Bluetooth SIG website找到标准服务的uuid。如果uuid不在那里(即定制服务),您应该阅读外围设备的手册或联系外围设备制造商。

答案 1 :(得分:1)

这取决于您认为“有用”的信息。

BLE的工作方式大多类似于字典,您可以在其中查找长数字(特征)并获取二进制数据,因此,如果没有关于您正在处理的设备的先验信息,您在发现服务时就看不到多少。

也就是说,在the BLE docs中,有一个方法displayGattServices()将发现的服务信息放在ExpandableListView中,在这里我改变了它来将服务和特性的UUID打印到logcat。 / p>

除了UUID之外,您还可以使用getProperties()查找其他特征属性(如特征数据的格式),或getPermissions()以查看是否可以读取或写入特征。

// Demonstrates how to iterate through the supported GATT
// Services/Characteristics.
private void displayGattServices(List<BluetoothGattService> gattServices) {
    final String TAG = "BleServiceInfo";

    if (gattServices == null) return;
    String uuid;
    String unknownServiceString = "Unknown service"
    String unknownCharaString = "Unknown characteristic"

    // Loops through available GATT Services.
    for (BluetoothGattService gattService : gattServices) {
        Log.d(TAG, "Service: " + gattService.getUuid().toString());

        // Loops through available Characteristics.
        for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {
            Log.d(TAG, "\tCharacteristic: " + gattCharacteristic.getUuid().toString());
        }
     }
}

onServicesDisccovered()调用此方法,如下所示:

public void onServicesDiscovered(BluetoothGatt gatt, int status) {
    ....

    displayGattServices(gatt.getServices()); 
}