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

时间:2014-01-23 03:30:32

标签: android sdk bluetooth bluetooth-lowenergy

我无法为我的BLE设备开发Android软件。 我的软件可以找到我的设备和GATT服务,但在我的服务中找不到任何特性。

我检查了android-sdk-4.4.2源码,发现了一些代码。 https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/android-sdk-4.4.2_r1 https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-sdk-4.4.2_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 个答案:

答案 0 :(得分:1)

了解GATT的实施。虽然我不是来自android背景,但我真的无法通过您发布的代码看到您正在做的事情,我建议您尝试一些事情以使其工作。 首先,正如您的设备具有唯一的MAC ID一样,每个服务都有其UUID,服务中包含的特性也有自己的UUID。

  • 连接后,请阅读您需要的GATT服务。
  • 一旦收到GATT描述符,您应该能够看到服务中包含的特征,并且您应该能够通过相应的ID或句柄访问它们。由于我没有Android开发经验,我无法告诉你什么句柄,什么描述符,什么ID,什么数据结构会为你做,但必须有一些。

答案 1 :(得分:1)

这就是你要找的东西。它是 private void button1_Click(object sender, RibbonControlEventArgs e) { MessageBox.Show("Save and Send button was clicked."); Outlook.Application application = new Outlook.Application(); Outlook.Explorer explorer = application.ActiveExplorer(); Outlook.Inspector inspector = application.ActiveInspector(); Outlook._MailItem mailItem = inspector.CurrentItem; Outlook.NameSpace nameSpace = application.GetNamespace("MAPI"); MessageBox.Show("Select a location to save the email"); Outlook.MAPIFolder folder = (Outlook.Folder)nameSpace.PickFolder(); Outlook._MailItem newMailCopy = mailItem.Copy(); newMailCopy.Move(folder); mailItem.Send(); MessageBox.Show(newMailCopy + " was copied to " + folder); } 的回调函数,并返回每个服务的UUID,并为每个服务返回特征UUID。

gatt.discoverServices();

答案 2 :(得分:0)

我希望UUID的形式如下: 0000AABB-0000-1000-8000-00805F9B34FB。使用UUID.fromString("你的uuid")也会容易得多。如果您知道特征uuid,在onServicesDiscovered()内部,您可以通过以下方式直接启用char:

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

            characteristic.setValue(new byte[]{0x01});
            gatt.writeCharacteristic(characteristic);
}