2

我必须使用 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 身份运行应用程序。

肿瘤坏死因子。

4

1 回答 1

2

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

于 2011-09-22T08:56:17.523 回答