当前位置: 首页 > 知识库问答 >
问题:

Android BLE在BLE设备上的GATT服务中找不到特性

贺兴平
2023-03-14

我在为我的BLE设备开发Android软件时遇到了麻烦。我的软件可以找到我的设备和GATT服务,但在我的服务中找不到任何特征。

我查看了android-sdk-4.4.2源代码,发现了一些代码。https://android.googlesource.com/platform/external/bluetooth/bluedroid//android-sdk-4.4.2\u r1https://android.googlesource.com/platform/packages/apps/Bluetooth//android-sdk-4.4.2\u r1

static char BASE_UUID[16] = {
    0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
    0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

int uuidType(unsigned char* p_uuid)
{
    int i = 0;
    int match = 0;
    int all_zero = 1;

    for(i = 0; i != 16; ++i)
    {
        if (i == 12 || i == 13)
            continue;

        if (p_uuid[i] == BASE_UUID[i])
            ++match;

        if (p_uuid[i] != 0)
            all_zero = 0;
    }
    if (all_zero)
        return 0;
    if (match == 12)
        return LEN_UUID_32;
    if (match == 14)
        return LEN_UUID_16;
    return LEN_UUID_128;
}

我的BLE设备UUID是0000XXXX-AABB-1000-8000-00805F9B34FB。此代码是否导致此问题?还是我的BLE设备UUID有问题?

共有3个答案

武元白
2023-03-14

我希望UUID的格式为:0000AABB-0000-1000-8000-00805F9B34FB。此外,使用UUID也会容易得多。fromString(“您的uuid”)。如果知道特征uuid,在OnServicesDiscovery()中,可以通过以下方式直接启用字符:

onServicesDiscovered()
{
            BluetoothGattCharacteristic characteristic = gatt.getService(
                    UUID.fromString(SENSOR_SERVICE_UUID)).getCharacteristic(
                    UUID.fromString(CONFIG_UUID
                    ));

            characteristic.setValue(new byte[]{0x01});
            gatt.writeCharacteristic(characteristic);
}
龙德海
2023-03-14

了解关贸总协定的执行情况。虽然我不是android背景,我真的无法通过你发布的代码看到你在做什么,但我建议你尝试一些事情来让它工作。首先,正如您的设备具有唯一的MAC ID一样,每个服务都有其UUID,并且服务中包含的特性也有其自己的UUID。

  • 一旦连接,请阅读您需要的GATT服务
  • 一旦您收到GATT描述符,您应该能够看到服务中包含的特性,并且应该能够通过各自的ID或句柄访问它们。由于我没有android开发经验,我无法告诉你什么句柄、什么描述符、什么ID、什么数据结构可以为你做到这一点,但必须有一些
东郭海阳
2023-03-14

这就是你要找的。它是对gatt的回调。discoverServices() 并返回每个服务的UUID,对于每个服务,它返回特征UUID。

@Override
    // New services discovered
    public void onServicesDiscovered(BluetoothGatt gatt, int status) {
        if (status == BluetoothGatt.GATT_SUCCESS) {
            for (BluetoothGattService gattService : gatt.getServices()) {
                for (BluetoothGattCharacteristic mCharacteristic : gattService.getCharacteristics()) {
                    Log.i(TAG, "Found Characteristic: " + mCharacteristic.getUuid().toString());
                }
                Log.i(TAG, "onServicesDiscovered UUID: " + gattService.getUuid().toString());
            }
        } else {
            Log.w(TAG, "onServicesDiscovered received: " + status);
        }
 类似资料:
  • 问题内容: 我想用BLE扫描某些设备。我只想显示我的设备,所以我知道了设备的名称,如果是好的设备,我会将其放在列表中。 我的问题是,如果我更改设备的名称,此检查将为false。因此,我看是否有可能获得一些我添加的用于执行检查的服务的不变的东西。唯一的方法是使用gatt在发现服务后执行此操作,然后再连接到该设备,但是,是否有可能在不连接设备的情况下从该设备发现某些服务? 问题答案: 我不具备andr

  • 我有3台Android设备,三星Galaxy S3手机,三星Tab4和Verizon OEM平板电脑。Verizon OEM平板电脑不支持BLE、API 17。我从android开发者网站安装了“BLE设备扫描”,并在Galaxy S3上运行。它只显示Verizon平板电脑是找到的设备。当我在三星Tab4上运行相同的应用程序时,它只显示Galaxy S3作为找到的设备。如果我只看Galaxy S3

  • 我正在开发一个POC,我使用实验性的BLE扫描接口来发现多个蓝牙设备,并从web应用程序连接到它们的GATT服务。 使用导航器请求单个设备。蓝牙。requestDevice(请求设备)生成一个可以连接到GATT服务器的设备。 当我尝试使用发现设备时,我收到的设备不允许我连接到GATT服务器。 对设备的调用。关贸总协定。connect()引发错误: 未授权GATT操作 如何获得授权访问检测到的设备上

  • 我试图构建一个Android应用程序,作为一个BLE外设,也作为GATT客户端。 以下是我试图实现的步骤: 但是,如何在Android设备上通知我可以建立连接,以便调用函数连接到GATT服务器? 我也通过启动广告后获取远程设备进行了尝试。 我错过了什么?

  • 我正在与Bluez一起使用带有USB蓝牙加密狗的TinyCore linux盒。我们使用示例gatt服务器添加电池服务以发送降低的电池电量。使用蓝牙,我们的控制器(USB蓝牙加密狗)的信息显示服务: 我们的目标是在Android应用程序上阅读此内容,但在我们的自定义应用程序和示例BLE扫描应用程序中,我们看到的唯一服务是00001800(通用访问配置文件)和00001801(通用属性配置文件)。

  • Android问题 一旦我的设备收到数据从GATT服务器,一次收到数据后,它被断开连接。我尝试了许多不同的方法,但都不起作用。我已经阅读了整个网址也...Android4.3蓝牙低能耗不稳定