2
越來越HCI設備的列表,從司機我與Android的人機交互設備的工作,所以我儘量實現一個簡單的代碼獲得藍牙設備的數量:問題與Android的
...
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。
我假設你使用JNI來調用這段代碼,它是使用C++而不是Java API API的要求嗎? –
是的,我使用的是JNI,因此它是唯一使用hci設備直接(ioctl(int,int,...)funciton)。Android API不實現hci(低級別)協議,但只有rfcomm(高級別),但它不足以實現我想實現的目標。 – Borg8