从Android中的驱动程序获取HCI设备列表的问题

时间:2011-09-14 18:31:10

标签: android bluetooth driver hci

我必须使用Android的HCI设备,所以我尝试实现一个简单的代码来获取蓝牙设备的数量:

...
struct hci_dev_req *dr;

int sk = socket(AF_BLUETOOTH, SOCK_RAW, BTPROTO_HCI);
if (sk < 0)
{
    res = "invalid socket";
    goto end;
}

struct hci_dev_list_req *dl = malloc(HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));
if (!dl)
{
    res = "not enough memory";
    goto end;
}

memset(dl, 0, HCI_MAX_DEV * sizeof(*dr) + sizeof(*dl));

dl->dev_num = HCI_MAX_DEV;
dr = dl->dev_req;

if (ioctl(sk, HCIGETDEVLIST, (void *) dl) < 0)
{
    res = "unable to get device list";
    goto end;
}

if(dl->dev_num == 0)
{
    res = "device list is empty";
    goto end;
}
...

所以每次我收到消息“设备列表为空”。为什么会这样? 只有我在程序中拥有的权限才能显示它们:BLUETOOTH和BLUETOOTH_ADMIN。我以简单的用户身份运行应用程序而不是root用户。

TNX。

1 个答案:

答案 0 :(得分:2)

好的,我找到原因:设备不会回答简单用户(并且无论你在程序清单中询问了什么权限)。只有在您是root用户时(或从内核模式),您才能直接与设备通话。这意味着您无法直接从常规应用程序中使用设备。很伤心:(