2

AndroidのHCIデバイスを使用する必要があるため、Bluetoothデバイスの数を取得するための簡単なコードを実装しようとしています。

...
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。

4

1 に答える 1

2

わかりました。理由はわかりました。デバイスは単純なユーザーに応答しません(プログラムマニフェストでどの権限を要求したかは関係ありません)。ルート(またはカーネルモード)の場合にのみ、デバイスと直接話すことができます。つまり、一般的なアプリケーションから直接デバイスを使用することはできません。とても悲しい :(

于 2011-09-22T08:56:17.523 に答える