2011-09-14 88 views
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。

+0

我假設你使用JNI來調用這段代碼,它是使用C++而不是Java API API的要求嗎? –

+0

是的,我使用的是JNI,因此它是唯一使用hci設備直接(ioctl(int,int,...)funciton)。Android API不實現hci(低級別)協議,但只有rfcomm(高級別),但它不足以實現我想實現的目標。 – Borg8

回答

2

好吧,我找到了原因:設備不會回答簡單的用戶(並且無所謂你在程序清單中要求什麼權限)。只有當您是root用戶(或者來自內核模式)時,纔可以直接與設備通話。這意味着您不能直接從一般應用程序使用設備。非常傷心:(